summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/app
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fxfa/src/app')
-rw-r--r--xfa/src/fxfa/src/app/xfa_checksum.cpp376
-rw-r--r--xfa/src/fxfa/src/app/xfa_checksum.h132
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffConfigAcc.cpp122
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffConfigAcc.h50
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffapp.cpp430
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffapp.h150
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffbarcode.cpp464
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffbarcode.h190
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffcheckbutton.cpp666
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffcheckbutton.h78
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffchoicelist.cpp1080
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffchoicelist.h184
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdoc.cpp896
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdoc.h128
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdochandler.cpp218
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdochandler.h96
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdocview.cpp1872
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdocview.h344
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdraw.cpp32
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffdraw.h32
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffexclgroup.cpp62
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffexclgroup.h42
-rw-r--r--xfa/src/fxfa/src/app/xfa_fffield.cpp1700
-rw-r--r--xfa/src/fxfa/src/app/xfa_fffield.h184
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffimage.cpp134
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffimage.h42
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffimageedit.cpp366
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffimageedit.h64
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffnotify.cpp1314
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffnotify.h190
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffpageview.cpp846
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffpageview.h214
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffpath.cpp316
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffpath.h78
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp502
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffpushbutton.h86
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffsignature.cpp240
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffsignature.h82
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffsubform.cpp34
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffsubform.h32
-rw-r--r--xfa/src/fxfa/src/app/xfa_fftext.cpp354
-rw-r--r--xfa/src/fxfa/src/app/xfa_fftext.h58
-rw-r--r--xfa/src/fxfa/src/app/xfa_fftextedit.cpp1610
-rw-r--r--xfa/src/fxfa/src/app/xfa_fftextedit.h254
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffwidget.cpp3918
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffwidget.h372
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffwidgetacc.cpp3436
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffwidgetacc.h82
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp1278
-rw-r--r--xfa/src/fxfa/src/app/xfa_ffwidgethandler.h334
-rw-r--r--xfa/src/fxfa/src/app/xfa_fontmgr.cpp4186
-rw-r--r--xfa/src/fxfa/src/app/xfa_fontmgr.h186
-rw-r--r--xfa/src/fxfa/src/app/xfa_fwladapter.cpp156
-rw-r--r--xfa/src/fxfa/src/app/xfa_fwladapter.h36
-rw-r--r--xfa/src/fxfa/src/app/xfa_fwltheme.cpp822
-rw-r--r--xfa/src/fxfa/src/app/xfa_fwltheme.h184
-rw-r--r--xfa/src/fxfa/src/app/xfa_rendercontext.cpp150
-rw-r--r--xfa/src/fxfa/src/app/xfa_rendercontext.h62
-rw-r--r--xfa/src/fxfa/src/app/xfa_textlayout.cpp4044
-rw-r--r--xfa/src/fxfa/src/app/xfa_textlayout.h812
60 files changed, 18201 insertions, 18201 deletions
diff --git a/xfa/src/fxfa/src/app/xfa_checksum.cpp b/xfa/src/fxfa/src/app/xfa_checksum.cpp
index 87c3cdbe25..a62f8a4b40 100644
--- a/xfa/src/fxfa/src/app/xfa_checksum.cpp
+++ b/xfa/src/fxfa/src/app/xfa_checksum.cpp
@@ -1,188 +1,188 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_checksum.h"
-CXFA_SAXReaderHandler::CXFA_SAXReaderHandler(CXFA_ChecksumContext* pContext)
- : m_pContext(pContext) {
- FXSYS_assert(m_pContext);
-}
-CXFA_SAXReaderHandler::~CXFA_SAXReaderHandler() {}
-void* CXFA_SAXReaderHandler::OnTagEnter(const CFX_ByteStringC& bsTagName,
- FX_SAXNODE eType,
- FX_DWORD dwStartPos) {
- UpdateChecksum(TRUE);
- if (eType != FX_SAXNODE_Tag && eType != FX_SAXNODE_Instruction) {
- return NULL;
- }
- m_SAXContext.m_eNode = eType;
- CFX_ByteTextBuf& textBuf = m_SAXContext.m_TextBuf;
- textBuf << "<";
- if (eType == FX_SAXNODE_Instruction) {
- textBuf << "?";
- }
- textBuf << bsTagName;
- m_SAXContext.m_bsTagName = bsTagName;
- return &m_SAXContext;
-}
-void CXFA_SAXReaderHandler::OnTagAttribute(void* pTag,
- const CFX_ByteStringC& bsAttri,
- const CFX_ByteStringC& bsValue) {
- if (pTag == NULL) {
- return;
- }
- CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
- textBuf << " " << bsAttri << "=\"" << bsValue << "\"";
-}
-void CXFA_SAXReaderHandler::OnTagBreak(void* pTag) {
- if (pTag == NULL) {
- return;
- }
- CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
- textBuf << ">";
- UpdateChecksum(FALSE);
-}
-void CXFA_SAXReaderHandler::OnTagData(void* pTag,
- FX_SAXNODE eType,
- const CFX_ByteStringC& bsData,
- FX_DWORD dwStartPos) {
- if (pTag == NULL) {
- return;
- }
- CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
- if (eType == FX_SAXNODE_CharData) {
- textBuf << "<![CDATA[";
- }
- textBuf << bsData;
- if (eType == FX_SAXNODE_CharData) {
- textBuf << "]]>";
- }
-}
-void CXFA_SAXReaderHandler::OnTagClose(void* pTag, FX_DWORD dwEndPos) {
- if (pTag == NULL) {
- return;
- }
- CXFA_SAXContext* pSAXContext = (CXFA_SAXContext*)pTag;
- CFX_ByteTextBuf& textBuf = pSAXContext->m_TextBuf;
- if (pSAXContext->m_eNode == FX_SAXNODE_Instruction) {
- textBuf << "?>";
- } else if (pSAXContext->m_eNode == FX_SAXNODE_Tag) {
- textBuf << "></" << pSAXContext->m_bsTagName << ">";
- }
- UpdateChecksum(FALSE);
-}
-void CXFA_SAXReaderHandler::OnTagEnd(void* pTag,
- const CFX_ByteStringC& bsTagName,
- FX_DWORD dwEndPos) {
- if (pTag == NULL) {
- return;
- }
- CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
- textBuf << "</" << bsTagName << ">";
- UpdateChecksum(FALSE);
-}
-void CXFA_SAXReaderHandler::OnTargetData(void* pTag,
- FX_SAXNODE eType,
- const CFX_ByteStringC& bsData,
- FX_DWORD dwStartPos) {
- if (pTag == NULL && eType != FX_SAXNODE_Comment) {
- return;
- }
- if (eType == FX_SAXNODE_Comment) {
- CFX_ByteTextBuf& textBuf = m_SAXContext.m_TextBuf;
- textBuf << "<!--" << bsData << "-->";
- UpdateChecksum(FALSE);
- } else {
- CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
- textBuf << " " << bsData;
- }
-}
-void CXFA_SAXReaderHandler::UpdateChecksum(FX_BOOL bCheckSpace) {
- int32_t iLength = m_SAXContext.m_TextBuf.GetLength();
- if (iLength < 1) {
- return;
- }
- uint8_t* pBuffer = m_SAXContext.m_TextBuf.GetBuffer();
- FX_BOOL bUpdata = TRUE;
- if (bCheckSpace) {
- bUpdata = FALSE;
- for (int32_t i = 0; i < iLength; i++) {
- bUpdata = (pBuffer[i] > 0x20);
- if (bUpdata) {
- break;
- }
- }
- }
- if (bUpdata) {
- m_pContext->Update(CFX_ByteStringC(pBuffer, iLength));
- }
- m_SAXContext.m_TextBuf.Clear();
-}
-IXFA_ChecksumContext* XFA_Checksum_Create() {
- return new CXFA_ChecksumContext;
-}
-CXFA_ChecksumContext::CXFA_ChecksumContext()
- : m_pSAXReader(NULL), m_pByteContext(NULL) {}
-CXFA_ChecksumContext::~CXFA_ChecksumContext() {
- FinishChecksum();
-}
-FX_BOOL CXFA_ChecksumContext::StartChecksum() {
- FinishChecksum();
- m_pByteContext = FX_Alloc(uint8_t, 128);
- CRYPT_SHA1Start(m_pByteContext);
- m_bsChecksum.Empty();
- m_pSAXReader = FX_SAXReader_Create();
- return m_pSAXReader != NULL;
-}
-FX_BOOL CXFA_ChecksumContext::UpdateChecksum(IFX_FileRead* pSrcFile,
- FX_FILESIZE offset,
- size_t size) {
- if (m_pSAXReader == NULL) {
- return FALSE;
- }
- if (pSrcFile == NULL) {
- return FALSE;
- }
- if (size < 1) {
- size = pSrcFile->GetSize();
- }
- CXFA_SAXReaderHandler handler(this);
- m_pSAXReader->SetHandler(&handler);
- if (m_pSAXReader->StartParse(
- pSrcFile, (FX_DWORD)offset, (FX_DWORD)size,
- FX_SAXPARSEMODE_NotSkipSpace | FX_SAXPARSEMODE_NotConvert_amp |
- FX_SAXPARSEMODE_NotConvert_lt | FX_SAXPARSEMODE_NotConvert_gt |
- FX_SAXPARSEMODE_NotConvert_sharp) < 0) {
- return FALSE;
- }
- return m_pSAXReader->ContinueParse(NULL) > 99;
-}
-void CXFA_ChecksumContext::FinishChecksum() {
- if (m_pSAXReader != NULL) {
- m_pSAXReader->Release();
- m_pSAXReader = NULL;
- }
- if (m_pByteContext) {
- uint8_t digest[20];
- FXSYS_memset(digest, 0, 20);
- CRYPT_SHA1Finish(m_pByteContext, digest);
- int32_t nLen = FX_Base64EncodeA(digest, 20, NULL);
- FX_CHAR* pBuffer = m_bsChecksum.GetBuffer(nLen);
- FX_Base64EncodeA(digest, 20, pBuffer);
- m_bsChecksum.ReleaseBuffer(nLen);
- FX_Free(m_pByteContext);
- m_pByteContext = NULL;
- }
-}
-void CXFA_ChecksumContext::GetChecksum(CFX_ByteString& bsChecksum) {
- bsChecksum = m_bsChecksum;
-}
-void CXFA_ChecksumContext::Update(const CFX_ByteStringC& bsText) {
- if (m_pByteContext != NULL) {
- CRYPT_SHA1Update(m_pByteContext, bsText.GetPtr(), bsText.GetLength());
- }
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_checksum.h"
+CXFA_SAXReaderHandler::CXFA_SAXReaderHandler(CXFA_ChecksumContext* pContext)
+ : m_pContext(pContext) {
+ FXSYS_assert(m_pContext);
+}
+CXFA_SAXReaderHandler::~CXFA_SAXReaderHandler() {}
+void* CXFA_SAXReaderHandler::OnTagEnter(const CFX_ByteStringC& bsTagName,
+ FX_SAXNODE eType,
+ FX_DWORD dwStartPos) {
+ UpdateChecksum(TRUE);
+ if (eType != FX_SAXNODE_Tag && eType != FX_SAXNODE_Instruction) {
+ return NULL;
+ }
+ m_SAXContext.m_eNode = eType;
+ CFX_ByteTextBuf& textBuf = m_SAXContext.m_TextBuf;
+ textBuf << "<";
+ if (eType == FX_SAXNODE_Instruction) {
+ textBuf << "?";
+ }
+ textBuf << bsTagName;
+ m_SAXContext.m_bsTagName = bsTagName;
+ return &m_SAXContext;
+}
+void CXFA_SAXReaderHandler::OnTagAttribute(void* pTag,
+ const CFX_ByteStringC& bsAttri,
+ const CFX_ByteStringC& bsValue) {
+ if (pTag == NULL) {
+ return;
+ }
+ CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
+ textBuf << " " << bsAttri << "=\"" << bsValue << "\"";
+}
+void CXFA_SAXReaderHandler::OnTagBreak(void* pTag) {
+ if (pTag == NULL) {
+ return;
+ }
+ CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
+ textBuf << ">";
+ UpdateChecksum(FALSE);
+}
+void CXFA_SAXReaderHandler::OnTagData(void* pTag,
+ FX_SAXNODE eType,
+ const CFX_ByteStringC& bsData,
+ FX_DWORD dwStartPos) {
+ if (pTag == NULL) {
+ return;
+ }
+ CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
+ if (eType == FX_SAXNODE_CharData) {
+ textBuf << "<![CDATA[";
+ }
+ textBuf << bsData;
+ if (eType == FX_SAXNODE_CharData) {
+ textBuf << "]]>";
+ }
+}
+void CXFA_SAXReaderHandler::OnTagClose(void* pTag, FX_DWORD dwEndPos) {
+ if (pTag == NULL) {
+ return;
+ }
+ CXFA_SAXContext* pSAXContext = (CXFA_SAXContext*)pTag;
+ CFX_ByteTextBuf& textBuf = pSAXContext->m_TextBuf;
+ if (pSAXContext->m_eNode == FX_SAXNODE_Instruction) {
+ textBuf << "?>";
+ } else if (pSAXContext->m_eNode == FX_SAXNODE_Tag) {
+ textBuf << "></" << pSAXContext->m_bsTagName << ">";
+ }
+ UpdateChecksum(FALSE);
+}
+void CXFA_SAXReaderHandler::OnTagEnd(void* pTag,
+ const CFX_ByteStringC& bsTagName,
+ FX_DWORD dwEndPos) {
+ if (pTag == NULL) {
+ return;
+ }
+ CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
+ textBuf << "</" << bsTagName << ">";
+ UpdateChecksum(FALSE);
+}
+void CXFA_SAXReaderHandler::OnTargetData(void* pTag,
+ FX_SAXNODE eType,
+ const CFX_ByteStringC& bsData,
+ FX_DWORD dwStartPos) {
+ if (pTag == NULL && eType != FX_SAXNODE_Comment) {
+ return;
+ }
+ if (eType == FX_SAXNODE_Comment) {
+ CFX_ByteTextBuf& textBuf = m_SAXContext.m_TextBuf;
+ textBuf << "<!--" << bsData << "-->";
+ UpdateChecksum(FALSE);
+ } else {
+ CFX_ByteTextBuf& textBuf = ((CXFA_SAXContext*)pTag)->m_TextBuf;
+ textBuf << " " << bsData;
+ }
+}
+void CXFA_SAXReaderHandler::UpdateChecksum(FX_BOOL bCheckSpace) {
+ int32_t iLength = m_SAXContext.m_TextBuf.GetLength();
+ if (iLength < 1) {
+ return;
+ }
+ uint8_t* pBuffer = m_SAXContext.m_TextBuf.GetBuffer();
+ FX_BOOL bUpdata = TRUE;
+ if (bCheckSpace) {
+ bUpdata = FALSE;
+ for (int32_t i = 0; i < iLength; i++) {
+ bUpdata = (pBuffer[i] > 0x20);
+ if (bUpdata) {
+ break;
+ }
+ }
+ }
+ if (bUpdata) {
+ m_pContext->Update(CFX_ByteStringC(pBuffer, iLength));
+ }
+ m_SAXContext.m_TextBuf.Clear();
+}
+IXFA_ChecksumContext* XFA_Checksum_Create() {
+ return new CXFA_ChecksumContext;
+}
+CXFA_ChecksumContext::CXFA_ChecksumContext()
+ : m_pSAXReader(NULL), m_pByteContext(NULL) {}
+CXFA_ChecksumContext::~CXFA_ChecksumContext() {
+ FinishChecksum();
+}
+FX_BOOL CXFA_ChecksumContext::StartChecksum() {
+ FinishChecksum();
+ m_pByteContext = FX_Alloc(uint8_t, 128);
+ CRYPT_SHA1Start(m_pByteContext);
+ m_bsChecksum.Empty();
+ m_pSAXReader = FX_SAXReader_Create();
+ return m_pSAXReader != NULL;
+}
+FX_BOOL CXFA_ChecksumContext::UpdateChecksum(IFX_FileRead* pSrcFile,
+ FX_FILESIZE offset,
+ size_t size) {
+ if (m_pSAXReader == NULL) {
+ return FALSE;
+ }
+ if (pSrcFile == NULL) {
+ return FALSE;
+ }
+ if (size < 1) {
+ size = pSrcFile->GetSize();
+ }
+ CXFA_SAXReaderHandler handler(this);
+ m_pSAXReader->SetHandler(&handler);
+ if (m_pSAXReader->StartParse(
+ pSrcFile, (FX_DWORD)offset, (FX_DWORD)size,
+ FX_SAXPARSEMODE_NotSkipSpace | FX_SAXPARSEMODE_NotConvert_amp |
+ FX_SAXPARSEMODE_NotConvert_lt | FX_SAXPARSEMODE_NotConvert_gt |
+ FX_SAXPARSEMODE_NotConvert_sharp) < 0) {
+ return FALSE;
+ }
+ return m_pSAXReader->ContinueParse(NULL) > 99;
+}
+void CXFA_ChecksumContext::FinishChecksum() {
+ if (m_pSAXReader != NULL) {
+ m_pSAXReader->Release();
+ m_pSAXReader = NULL;
+ }
+ if (m_pByteContext) {
+ uint8_t digest[20];
+ FXSYS_memset(digest, 0, 20);
+ CRYPT_SHA1Finish(m_pByteContext, digest);
+ int32_t nLen = FX_Base64EncodeA(digest, 20, NULL);
+ FX_CHAR* pBuffer = m_bsChecksum.GetBuffer(nLen);
+ FX_Base64EncodeA(digest, 20, pBuffer);
+ m_bsChecksum.ReleaseBuffer(nLen);
+ FX_Free(m_pByteContext);
+ m_pByteContext = NULL;
+ }
+}
+void CXFA_ChecksumContext::GetChecksum(CFX_ByteString& bsChecksum) {
+ bsChecksum = m_bsChecksum;
+}
+void CXFA_ChecksumContext::Update(const CFX_ByteStringC& bsText) {
+ if (m_pByteContext != NULL) {
+ CRYPT_SHA1Update(m_pByteContext, bsText.GetPtr(), bsText.GetLength());
+ }
+}
diff --git a/xfa/src/fxfa/src/app/xfa_checksum.h b/xfa/src/fxfa/src/app/xfa_checksum.h
index 1d4d9431e2..96c7fd222f 100644
--- a/xfa/src/fxfa/src/app/xfa_checksum.h
+++ b/xfa/src/fxfa/src/app/xfa_checksum.h
@@ -1,66 +1,66 @@
-// 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 _FXFA_FORMFILLER_CHECKSUM_IMP_H
-#define _FXFA_FORMFILLER_CHECKSUM_IMP_H
-class CXFA_SAXReaderHandler;
-class CXFA_ChecksumContext;
-class CXFA_SAXContext {
- public:
- CXFA_SAXContext() : m_eNode(FX_SAXNODE_Unknown) {}
- CFX_ByteTextBuf m_TextBuf;
- CFX_ByteString m_bsTagName;
- FX_SAXNODE m_eNode;
-};
-class CXFA_SAXReaderHandler : public IFX_SAXReaderHandler {
- public:
- CXFA_SAXReaderHandler(CXFA_ChecksumContext* pContext);
- virtual ~CXFA_SAXReaderHandler();
- virtual void* OnTagEnter(const CFX_ByteStringC& bsTagName,
- FX_SAXNODE eType,
- FX_DWORD dwStartPos);
- virtual void OnTagAttribute(void* pTag,
- const CFX_ByteStringC& bsAttri,
- const CFX_ByteStringC& bsValue);
- virtual void OnTagBreak(void* pTag);
- virtual void OnTagData(void* pTag,
- FX_SAXNODE eType,
- const CFX_ByteStringC& bsData,
- FX_DWORD dwStartPos);
- virtual void OnTagClose(void* pTag, FX_DWORD dwEndPos);
- virtual void OnTagEnd(void* pTag,
- const CFX_ByteStringC& bsTagName,
- FX_DWORD dwEndPos);
-
- virtual void OnTargetData(void* pTag,
- FX_SAXNODE eType,
- const CFX_ByteStringC& bsData,
- FX_DWORD dwStartPos);
-
- protected:
- void UpdateChecksum(FX_BOOL bCheckSpace);
- CXFA_ChecksumContext* m_pContext;
- CXFA_SAXContext m_SAXContext;
-};
-class CXFA_ChecksumContext : public IXFA_ChecksumContext {
- public:
- CXFA_ChecksumContext();
- virtual ~CXFA_ChecksumContext();
- virtual void Release() { delete this; }
- virtual FX_BOOL StartChecksum();
- virtual FX_BOOL UpdateChecksum(IFX_FileRead* pSrcFile,
- FX_FILESIZE offset = 0,
- size_t size = 0);
- virtual void FinishChecksum();
- virtual void GetChecksum(CFX_ByteString& bsChecksum);
- void Update(const CFX_ByteStringC& bsText);
-
- protected:
- IFX_SAXReader* m_pSAXReader;
- uint8_t* m_pByteContext;
- CFX_ByteString m_bsChecksum;
-};
-#endif
+// 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 _FXFA_FORMFILLER_CHECKSUM_IMP_H
+#define _FXFA_FORMFILLER_CHECKSUM_IMP_H
+class CXFA_SAXReaderHandler;
+class CXFA_ChecksumContext;
+class CXFA_SAXContext {
+ public:
+ CXFA_SAXContext() : m_eNode(FX_SAXNODE_Unknown) {}
+ CFX_ByteTextBuf m_TextBuf;
+ CFX_ByteString m_bsTagName;
+ FX_SAXNODE m_eNode;
+};
+class CXFA_SAXReaderHandler : public IFX_SAXReaderHandler {
+ public:
+ CXFA_SAXReaderHandler(CXFA_ChecksumContext* pContext);
+ virtual ~CXFA_SAXReaderHandler();
+ virtual void* OnTagEnter(const CFX_ByteStringC& bsTagName,
+ FX_SAXNODE eType,
+ FX_DWORD dwStartPos);
+ virtual void OnTagAttribute(void* pTag,
+ const CFX_ByteStringC& bsAttri,
+ const CFX_ByteStringC& bsValue);
+ virtual void OnTagBreak(void* pTag);
+ virtual void OnTagData(void* pTag,
+ FX_SAXNODE eType,
+ const CFX_ByteStringC& bsData,
+ FX_DWORD dwStartPos);
+ virtual void OnTagClose(void* pTag, FX_DWORD dwEndPos);
+ virtual void OnTagEnd(void* pTag,
+ const CFX_ByteStringC& bsTagName,
+ FX_DWORD dwEndPos);
+
+ virtual void OnTargetData(void* pTag,
+ FX_SAXNODE eType,
+ const CFX_ByteStringC& bsData,
+ FX_DWORD dwStartPos);
+
+ protected:
+ void UpdateChecksum(FX_BOOL bCheckSpace);
+ CXFA_ChecksumContext* m_pContext;
+ CXFA_SAXContext m_SAXContext;
+};
+class CXFA_ChecksumContext : public IXFA_ChecksumContext {
+ public:
+ CXFA_ChecksumContext();
+ virtual ~CXFA_ChecksumContext();
+ virtual void Release() { delete this; }
+ virtual FX_BOOL StartChecksum();
+ virtual FX_BOOL UpdateChecksum(IFX_FileRead* pSrcFile,
+ FX_FILESIZE offset = 0,
+ size_t size = 0);
+ virtual void FinishChecksum();
+ virtual void GetChecksum(CFX_ByteString& bsChecksum);
+ void Update(const CFX_ByteStringC& bsText);
+
+ protected:
+ IFX_SAXReader* m_pSAXReader;
+ uint8_t* m_pByteContext;
+ CFX_ByteString m_bsChecksum;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffConfigAcc.cpp b/xfa/src/fxfa/src/app/xfa_ffConfigAcc.cpp
index e5b7e8789b..b88c05973e 100644
--- a/xfa/src/fxfa/src/app/xfa_ffConfigAcc.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffConfigAcc.cpp
@@ -1,61 +1,61 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffConfigAcc.h"
-CXFA_FFConfigAcc::CXFA_FFConfigAcc(CXFA_Node* pNode)
- : m_pNode(pNode), m_pPsMapNode(NULL) {}
-CXFA_FFConfigAcc::~CXFA_FFConfigAcc() {}
-int32_t CXFA_FFConfigAcc::CountChildren() {
- GetPsMapNode();
- if (m_pPsMapNode == NULL) {
- return 0;
- }
- int32_t iCount = 0;
- CXFA_Node* pNode = m_pPsMapNode->GetNodeItem(XFA_NODEITEM_FirstChild);
- for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
- iCount++;
- }
- return iCount;
-}
-FX_BOOL CXFA_FFConfigAcc::GetFontInfo(int32_t index,
- CFX_WideString& wsFontFamily,
- CFX_WideString& wsPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic) {
- if (index < 0 || index >= CountChildren()) {
- return FALSE;
- }
- CXFA_Node* pFontNode = m_pPsMapNode->GetChild(index, XFA_ELEMENT_Font);
- if (pFontNode == NULL) {
- return FALSE;
- }
- wsFontFamily.Empty();
- wsPsName.Empty();
- bBold = FALSE;
- bItalic = FALSE;
- pFontNode->GetAttribute(XFA_ATTRIBUTE_Typeface, wsFontFamily);
- pFontNode->GetAttribute(XFA_ATTRIBUTE_PsName, wsPsName);
- CFX_WideString wsValue;
- pFontNode->GetAttribute(XFA_ATTRIBUTE_Weight, wsValue);
- wsValue.MakeLower();
- if (wsValue == FX_WSTRC(L"bold")) {
- bBold = TRUE;
- }
- pFontNode->GetAttribute(XFA_ATTRIBUTE_Posture, wsValue);
- wsValue.MakeLower();
- if (wsValue == FX_WSTRC(L"italic")) {
- bItalic = TRUE;
- }
- return wsFontFamily.GetLength() > 0;
-}
-void CXFA_FFConfigAcc::GetPsMapNode() {
- if (m_pNode == NULL) {
- return;
- }
- m_pPsMapNode = m_pNode->GetChild(0, XFA_ELEMENT_PsMap);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffConfigAcc.h"
+CXFA_FFConfigAcc::CXFA_FFConfigAcc(CXFA_Node* pNode)
+ : m_pNode(pNode), m_pPsMapNode(NULL) {}
+CXFA_FFConfigAcc::~CXFA_FFConfigAcc() {}
+int32_t CXFA_FFConfigAcc::CountChildren() {
+ GetPsMapNode();
+ if (m_pPsMapNode == NULL) {
+ return 0;
+ }
+ int32_t iCount = 0;
+ CXFA_Node* pNode = m_pPsMapNode->GetNodeItem(XFA_NODEITEM_FirstChild);
+ for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
+ iCount++;
+ }
+ return iCount;
+}
+FX_BOOL CXFA_FFConfigAcc::GetFontInfo(int32_t index,
+ CFX_WideString& wsFontFamily,
+ CFX_WideString& wsPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic) {
+ if (index < 0 || index >= CountChildren()) {
+ return FALSE;
+ }
+ CXFA_Node* pFontNode = m_pPsMapNode->GetChild(index, XFA_ELEMENT_Font);
+ if (pFontNode == NULL) {
+ return FALSE;
+ }
+ wsFontFamily.Empty();
+ wsPsName.Empty();
+ bBold = FALSE;
+ bItalic = FALSE;
+ pFontNode->GetAttribute(XFA_ATTRIBUTE_Typeface, wsFontFamily);
+ pFontNode->GetAttribute(XFA_ATTRIBUTE_PsName, wsPsName);
+ CFX_WideString wsValue;
+ pFontNode->GetAttribute(XFA_ATTRIBUTE_Weight, wsValue);
+ wsValue.MakeLower();
+ if (wsValue == FX_WSTRC(L"bold")) {
+ bBold = TRUE;
+ }
+ pFontNode->GetAttribute(XFA_ATTRIBUTE_Posture, wsValue);
+ wsValue.MakeLower();
+ if (wsValue == FX_WSTRC(L"italic")) {
+ bItalic = TRUE;
+ }
+ return wsFontFamily.GetLength() > 0;
+}
+void CXFA_FFConfigAcc::GetPsMapNode() {
+ if (m_pNode == NULL) {
+ return;
+ }
+ m_pPsMapNode = m_pNode->GetChild(0, XFA_ELEMENT_PsMap);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffConfigAcc.h b/xfa/src/fxfa/src/app/xfa_ffConfigAcc.h
index 80c7cb7cdd..f41495b4e9 100644
--- a/xfa/src/fxfa/src/app/xfa_ffConfigAcc.h
+++ b/xfa/src/fxfa/src/app/xfa_ffConfigAcc.h
@@ -1,25 +1,25 @@
-// 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 _FXFA_FORMFILLERCONFIGACC_IMP_H
-#define _FXFA_FORMFILLERCONFIGACC_IMP_H
-class CXFA_FFConfigAcc {
- public:
- CXFA_FFConfigAcc(CXFA_Node* pNode);
- ~CXFA_FFConfigAcc();
- int32_t CountChildren();
- FX_BOOL GetFontInfo(int32_t index,
- CFX_WideString& wsFontFamily,
- CFX_WideString& wsPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic);
-
- private:
- void GetPsMapNode();
- CXFA_Node* m_pNode;
- CXFA_Node* m_pPsMapNode;
-};
-#endif
+// 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 _FXFA_FORMFILLERCONFIGACC_IMP_H
+#define _FXFA_FORMFILLERCONFIGACC_IMP_H
+class CXFA_FFConfigAcc {
+ public:
+ CXFA_FFConfigAcc(CXFA_Node* pNode);
+ ~CXFA_FFConfigAcc();
+ int32_t CountChildren();
+ FX_BOOL GetFontInfo(int32_t index,
+ CFX_WideString& wsFontFamily,
+ CFX_WideString& wsPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic);
+
+ private:
+ void GetPsMapNode();
+ CXFA_Node* m_pNode;
+ CXFA_Node* m_pPsMapNode;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffapp.cpp b/xfa/src/fxfa/src/app/xfa_ffapp.cpp
index 8fb614b8a3..c9e791a3be 100644
--- a/xfa/src/fxfa/src/app/xfa_ffapp.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffapp.cpp
@@ -1,215 +1,215 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffdochandler.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffapp.h"
-#include "xfa_fwltheme.h"
-#include "xfa_fontmgr.h"
-#include "xfa_ffwidgethandler.h"
-
-CXFA_FileRead::CXFA_FileRead(const CFX_ArrayTemplate<CPDF_Stream*>& streams) {
- int32_t iCount = streams.GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- CPDF_StreamAcc& acc = m_Data.Add();
- acc.LoadAllData(streams[i]);
- }
-}
-FX_FILESIZE CXFA_FileRead::GetSize() {
- FX_DWORD dwSize = 0;
- int32_t iCount = m_Data.GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- CPDF_StreamAcc& acc = m_Data[i];
- dwSize += acc.GetSize();
- }
- return dwSize;
-}
-FX_BOOL CXFA_FileRead::ReadBlock(void* buffer,
- FX_FILESIZE offset,
- size_t size) {
- int32_t iCount = m_Data.GetSize();
- int32_t index = 0;
- while (index < iCount) {
- CPDF_StreamAcc& acc = m_Data[index];
- FX_FILESIZE dwSize = acc.GetSize();
- if (offset < dwSize) {
- break;
- }
- offset -= dwSize;
- index++;
- }
- while (index < iCount) {
- CPDF_StreamAcc& acc = m_Data[index];
- FX_DWORD dwSize = acc.GetSize();
- size_t dwRead = std::min(size, static_cast<size_t>(dwSize - offset));
- FXSYS_memcpy(buffer, acc.GetData() + offset, dwRead);
- size -= dwRead;
- if (size == 0) {
- return TRUE;
- }
- buffer = (uint8_t*)buffer + dwRead;
- offset = 0;
- index++;
- }
- return FALSE;
-}
-// static
-IXFA_App* IXFA_App::Create(IXFA_AppProvider* pProvider) {
- return new CXFA_FFApp(pProvider);
-}
-// virtual
-IXFA_App::~IXFA_App() {}
-CXFA_FFApp::CXFA_FFApp(IXFA_AppProvider* pProvider)
- : m_pDocHandler(nullptr),
- m_pFWLTheme(nullptr),
- m_pProvider(pProvider),
- m_pFontMgr(nullptr),
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
- m_pFontSource(nullptr),
-#endif
- m_pAdapterWidgetMgr(nullptr),
- m_pWidgetMgrDelegate(nullptr),
- m_pFDEFontMgr(nullptr),
- m_pMenuHandler(nullptr),
- m_pAdapterThreadMgr(nullptr) {
- m_pFWLApp = IFWL_App::Create(this);
- FWL_SetApp(m_pFWLApp);
- m_pFWLApp->Initialize();
- IXFA_TimeZoneProvider::Create();
-}
-CXFA_FFApp::~CXFA_FFApp() {
- if (m_pDocHandler) {
- delete m_pDocHandler;
- }
- if (m_pFWLApp) {
- m_pFWLApp->Finalize();
- m_pFWLApp->Release();
- delete m_pFWLApp;
- }
- if (m_pFWLTheme) {
- m_pFWLTheme->Release();
- }
- if (m_pAdapterWidgetMgr) {
- delete m_pAdapterWidgetMgr;
- }
- if (m_pAdapterThreadMgr) {
- delete m_pAdapterThreadMgr;
- m_pAdapterThreadMgr = NULL;
- }
- if (m_pMenuHandler) {
- delete m_pMenuHandler;
- m_pMenuHandler = NULL;
- }
- IXFA_TimeZoneProvider::Destroy();
- if (m_pFontMgr != NULL) {
- delete m_pFontMgr;
- m_pFontMgr = NULL;
- }
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
- if (m_pFontSource != NULL) {
- m_pFontSource->Release();
- }
-#endif
- if (m_pFDEFontMgr) {
- m_pFDEFontMgr->Release();
- }
-}
-IXFA_MenuHandler* CXFA_FFApp::GetMenuHandler() {
- if (!m_pMenuHandler) {
- m_pMenuHandler = new CXFA_FFMenuHandler;
- }
- return m_pMenuHandler;
-}
-IXFA_DocHandler* CXFA_FFApp::GetDocHandler() {
- if (!m_pDocHandler) {
- m_pDocHandler = new CXFA_FFDocHandler;
- }
- return m_pDocHandler;
-}
-IXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider,
- IFX_FileRead* pStream,
- FX_BOOL bTakeOverFile) {
- CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider);
- FX_BOOL bSuccess = pDoc->OpenDoc(pStream, bTakeOverFile);
- if (!bSuccess) {
- delete pDoc;
- pDoc = NULL;
- }
- return pDoc;
-}
-IXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider,
- CPDF_Document* pPDFDoc) {
- if (pPDFDoc == NULL) {
- return NULL;
- }
- CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider);
- FX_BOOL bSuccess = pDoc->OpenDoc(pPDFDoc);
- if (!bSuccess) {
- delete pDoc;
- pDoc = NULL;
- }
- return pDoc;
-}
-
-void CXFA_FFApp::SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) {
- if (!m_pFontMgr) {
- m_pFontMgr = new CXFA_FontMgr();
- }
- m_pFontMgr->SetDefFontMgr(pFontMgr);
-}
-CXFA_FontMgr* CXFA_FFApp::GetXFAFontMgr() {
- return m_pFontMgr;
-}
-IFX_FontMgr* CXFA_FFApp::GetFDEFontMgr() {
- if (!m_pFDEFontMgr) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- m_pFDEFontMgr = IFX_FontMgr::Create(FX_GetDefFontEnumerator());
-#else
- m_pFontSource = FX_CreateDefaultFontSourceEnum();
- m_pFDEFontMgr = IFX_FontMgr::Create(m_pFontSource);
-#endif
- }
- return m_pFDEFontMgr;
-}
-CXFA_FWLTheme* CXFA_FFApp::GetFWLTheme() {
- if (!m_pFWLTheme) {
- m_pFWLTheme = new CXFA_FWLTheme(this);
- }
- return m_pFWLTheme;
-}
-IFWL_AdapterWidgetMgr* CXFA_FFApp::GetWidgetMgr(
- IFWL_WidgetMgrDelegate* pDelegate) {
- if (!m_pAdapterWidgetMgr) {
- m_pAdapterWidgetMgr = new CXFA_FWLAdapterWidgetMgr;
- pDelegate->OnSetCapability(FWL_WGTMGR_DisableThread |
- FWL_WGTMGR_DisableForm);
- m_pWidgetMgrDelegate = pDelegate;
- }
- return m_pAdapterWidgetMgr;
-}
-IFWL_AdapterThreadMgr* CXFA_FFApp::GetThreadMgr() {
- if (!m_pAdapterThreadMgr) {
- m_pAdapterThreadMgr = new CFWL_SDAdapterThreadMgr;
- }
- return m_pAdapterThreadMgr;
-}
-IFWL_AdapterTimerMgr* CXFA_FFApp::GetTimerMgr() {
- return m_pProvider->GetTimerMgr();
-}
-IFWL_AdapterCursorMgr* CXFA_FFApp::GetCursorMgr() {
- return NULL;
-}
-IFWL_AdapterMonitorMgr* CXFA_FFApp::GetMonitorMgr() {
- return NULL;
-}
-IFWL_AdapterClipboardMgr* CXFA_FFApp::GetClipboardMgr() {
- return NULL;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffdochandler.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffapp.h"
+#include "xfa_fwltheme.h"
+#include "xfa_fontmgr.h"
+#include "xfa_ffwidgethandler.h"
+
+CXFA_FileRead::CXFA_FileRead(const CFX_ArrayTemplate<CPDF_Stream*>& streams) {
+ int32_t iCount = streams.GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ CPDF_StreamAcc& acc = m_Data.Add();
+ acc.LoadAllData(streams[i]);
+ }
+}
+FX_FILESIZE CXFA_FileRead::GetSize() {
+ FX_DWORD dwSize = 0;
+ int32_t iCount = m_Data.GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ CPDF_StreamAcc& acc = m_Data[i];
+ dwSize += acc.GetSize();
+ }
+ return dwSize;
+}
+FX_BOOL CXFA_FileRead::ReadBlock(void* buffer,
+ FX_FILESIZE offset,
+ size_t size) {
+ int32_t iCount = m_Data.GetSize();
+ int32_t index = 0;
+ while (index < iCount) {
+ CPDF_StreamAcc& acc = m_Data[index];
+ FX_FILESIZE dwSize = acc.GetSize();
+ if (offset < dwSize) {
+ break;
+ }
+ offset -= dwSize;
+ index++;
+ }
+ while (index < iCount) {
+ CPDF_StreamAcc& acc = m_Data[index];
+ FX_DWORD dwSize = acc.GetSize();
+ size_t dwRead = std::min(size, static_cast<size_t>(dwSize - offset));
+ FXSYS_memcpy(buffer, acc.GetData() + offset, dwRead);
+ size -= dwRead;
+ if (size == 0) {
+ return TRUE;
+ }
+ buffer = (uint8_t*)buffer + dwRead;
+ offset = 0;
+ index++;
+ }
+ return FALSE;
+}
+// static
+IXFA_App* IXFA_App::Create(IXFA_AppProvider* pProvider) {
+ return new CXFA_FFApp(pProvider);
+}
+// virtual
+IXFA_App::~IXFA_App() {}
+CXFA_FFApp::CXFA_FFApp(IXFA_AppProvider* pProvider)
+ : m_pDocHandler(nullptr),
+ m_pFWLTheme(nullptr),
+ m_pProvider(pProvider),
+ m_pFontMgr(nullptr),
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+ m_pFontSource(nullptr),
+#endif
+ m_pAdapterWidgetMgr(nullptr),
+ m_pWidgetMgrDelegate(nullptr),
+ m_pFDEFontMgr(nullptr),
+ m_pMenuHandler(nullptr),
+ m_pAdapterThreadMgr(nullptr) {
+ m_pFWLApp = IFWL_App::Create(this);
+ FWL_SetApp(m_pFWLApp);
+ m_pFWLApp->Initialize();
+ IXFA_TimeZoneProvider::Create();
+}
+CXFA_FFApp::~CXFA_FFApp() {
+ if (m_pDocHandler) {
+ delete m_pDocHandler;
+ }
+ if (m_pFWLApp) {
+ m_pFWLApp->Finalize();
+ m_pFWLApp->Release();
+ delete m_pFWLApp;
+ }
+ if (m_pFWLTheme) {
+ m_pFWLTheme->Release();
+ }
+ if (m_pAdapterWidgetMgr) {
+ delete m_pAdapterWidgetMgr;
+ }
+ if (m_pAdapterThreadMgr) {
+ delete m_pAdapterThreadMgr;
+ m_pAdapterThreadMgr = NULL;
+ }
+ if (m_pMenuHandler) {
+ delete m_pMenuHandler;
+ m_pMenuHandler = NULL;
+ }
+ IXFA_TimeZoneProvider::Destroy();
+ if (m_pFontMgr != NULL) {
+ delete m_pFontMgr;
+ m_pFontMgr = NULL;
+ }
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+ if (m_pFontSource != NULL) {
+ m_pFontSource->Release();
+ }
+#endif
+ if (m_pFDEFontMgr) {
+ m_pFDEFontMgr->Release();
+ }
+}
+IXFA_MenuHandler* CXFA_FFApp::GetMenuHandler() {
+ if (!m_pMenuHandler) {
+ m_pMenuHandler = new CXFA_FFMenuHandler;
+ }
+ return m_pMenuHandler;
+}
+IXFA_DocHandler* CXFA_FFApp::GetDocHandler() {
+ if (!m_pDocHandler) {
+ m_pDocHandler = new CXFA_FFDocHandler;
+ }
+ return m_pDocHandler;
+}
+IXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider,
+ IFX_FileRead* pStream,
+ FX_BOOL bTakeOverFile) {
+ CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider);
+ FX_BOOL bSuccess = pDoc->OpenDoc(pStream, bTakeOverFile);
+ if (!bSuccess) {
+ delete pDoc;
+ pDoc = NULL;
+ }
+ return pDoc;
+}
+IXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider,
+ CPDF_Document* pPDFDoc) {
+ if (pPDFDoc == NULL) {
+ return NULL;
+ }
+ CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider);
+ FX_BOOL bSuccess = pDoc->OpenDoc(pPDFDoc);
+ if (!bSuccess) {
+ delete pDoc;
+ pDoc = NULL;
+ }
+ return pDoc;
+}
+
+void CXFA_FFApp::SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) {
+ if (!m_pFontMgr) {
+ m_pFontMgr = new CXFA_FontMgr();
+ }
+ m_pFontMgr->SetDefFontMgr(pFontMgr);
+}
+CXFA_FontMgr* CXFA_FFApp::GetXFAFontMgr() {
+ return m_pFontMgr;
+}
+IFX_FontMgr* CXFA_FFApp::GetFDEFontMgr() {
+ if (!m_pFDEFontMgr) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ m_pFDEFontMgr = IFX_FontMgr::Create(FX_GetDefFontEnumerator());
+#else
+ m_pFontSource = FX_CreateDefaultFontSourceEnum();
+ m_pFDEFontMgr = IFX_FontMgr::Create(m_pFontSource);
+#endif
+ }
+ return m_pFDEFontMgr;
+}
+CXFA_FWLTheme* CXFA_FFApp::GetFWLTheme() {
+ if (!m_pFWLTheme) {
+ m_pFWLTheme = new CXFA_FWLTheme(this);
+ }
+ return m_pFWLTheme;
+}
+IFWL_AdapterWidgetMgr* CXFA_FFApp::GetWidgetMgr(
+ IFWL_WidgetMgrDelegate* pDelegate) {
+ if (!m_pAdapterWidgetMgr) {
+ m_pAdapterWidgetMgr = new CXFA_FWLAdapterWidgetMgr;
+ pDelegate->OnSetCapability(FWL_WGTMGR_DisableThread |
+ FWL_WGTMGR_DisableForm);
+ m_pWidgetMgrDelegate = pDelegate;
+ }
+ return m_pAdapterWidgetMgr;
+}
+IFWL_AdapterThreadMgr* CXFA_FFApp::GetThreadMgr() {
+ if (!m_pAdapterThreadMgr) {
+ m_pAdapterThreadMgr = new CFWL_SDAdapterThreadMgr;
+ }
+ return m_pAdapterThreadMgr;
+}
+IFWL_AdapterTimerMgr* CXFA_FFApp::GetTimerMgr() {
+ return m_pProvider->GetTimerMgr();
+}
+IFWL_AdapterCursorMgr* CXFA_FFApp::GetCursorMgr() {
+ return NULL;
+}
+IFWL_AdapterMonitorMgr* CXFA_FFApp::GetMonitorMgr() {
+ return NULL;
+}
+IFWL_AdapterClipboardMgr* CXFA_FFApp::GetClipboardMgr() {
+ return NULL;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffapp.h b/xfa/src/fxfa/src/app/xfa_ffapp.h
index ed93538ac6..52ad2af16c 100644
--- a/xfa/src/fxfa/src/app/xfa_ffapp.h
+++ b/xfa/src/fxfa/src/app/xfa_ffapp.h
@@ -1,75 +1,75 @@
-// 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 XFA_FFAPP_H_
-#define XFA_FFAPP_H_
-
-class CXFA_FileRead : public IFX_FileRead {
- public:
- explicit CXFA_FileRead(const CFX_ArrayTemplate<CPDF_Stream*>& streams);
-
- virtual FX_FILESIZE GetSize();
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size);
-
- virtual void Release() { delete this; }
-
- protected:
- CFX_ObjectArray<CPDF_StreamAcc> m_Data;
-};
-class CXFA_FWLAdapterWidgetMgr;
-class CXFA_FWLTheme;
-class CXFA_FFDocHandler;
-class CXFA_FFMenuHandler;
-class CXFA_FontMgr;
-class CXFA_FFApp : public IXFA_App, public IFWL_AdapterNative {
- public:
- CXFA_FFApp(IXFA_AppProvider* pProvider);
- ~CXFA_FFApp() override;
-
- // IFXFA_App:
- IXFA_DocHandler* GetDocHandler() override;
- IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider,
- IFX_FileRead* pStream,
- FX_BOOL bTakeOverFile) override;
- IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider,
- CPDF_Document* pPDFDoc) override;
- IXFA_AppProvider* GetAppProvider() override { return m_pProvider; }
- void SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) override;
- IXFA_MenuHandler* GetMenuHandler() override;
-
- // IFWL_AdapterNative:
- IFWL_AdapterWidgetMgr* GetWidgetMgr(
- IFWL_WidgetMgrDelegate* pDelegate) override;
- IFWL_AdapterThreadMgr* GetThreadMgr() override;
- IFWL_AdapterTimerMgr* GetTimerMgr() override;
- IFWL_AdapterCursorMgr* GetCursorMgr() override;
- IFWL_AdapterMonitorMgr* GetMonitorMgr() override;
- IFWL_AdapterClipboardMgr* GetClipboardMgr() override;
-
- CXFA_FontMgr* GetXFAFontMgr();
- IFX_FontMgr* GetFDEFontMgr();
- CXFA_FWLTheme* GetFWLTheme();
- IFWL_WidgetMgrDelegate* GetWidgetMgrDelegate() {
- return m_pWidgetMgrDelegate;
- }
-
- protected:
- CXFA_FFDocHandler* m_pDocHandler;
- IFWL_App* m_pFWLApp;
- CXFA_FWLTheme* m_pFWLTheme;
- IXFA_AppProvider* m_pProvider;
- CXFA_FontMgr* m_pFontMgr;
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
- IFX_FontSourceEnum* m_pFontSource;
-#endif
- CXFA_FWLAdapterWidgetMgr* m_pAdapterWidgetMgr;
- IFWL_WidgetMgrDelegate* m_pWidgetMgrDelegate;
- IFX_FontMgr* m_pFDEFontMgr;
- CXFA_FFMenuHandler* m_pMenuHandler;
- CFWL_SDAdapterThreadMgr* m_pAdapterThreadMgr;
-};
-
-#endif // XFA_FFAPP_H_
+// 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 XFA_FFAPP_H_
+#define XFA_FFAPP_H_
+
+class CXFA_FileRead : public IFX_FileRead {
+ public:
+ explicit CXFA_FileRead(const CFX_ArrayTemplate<CPDF_Stream*>& streams);
+
+ virtual FX_FILESIZE GetSize();
+ virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size);
+
+ virtual void Release() { delete this; }
+
+ protected:
+ CFX_ObjectArray<CPDF_StreamAcc> m_Data;
+};
+class CXFA_FWLAdapterWidgetMgr;
+class CXFA_FWLTheme;
+class CXFA_FFDocHandler;
+class CXFA_FFMenuHandler;
+class CXFA_FontMgr;
+class CXFA_FFApp : public IXFA_App, public IFWL_AdapterNative {
+ public:
+ CXFA_FFApp(IXFA_AppProvider* pProvider);
+ ~CXFA_FFApp() override;
+
+ // IFXFA_App:
+ IXFA_DocHandler* GetDocHandler() override;
+ IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider,
+ IFX_FileRead* pStream,
+ FX_BOOL bTakeOverFile) override;
+ IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider,
+ CPDF_Document* pPDFDoc) override;
+ IXFA_AppProvider* GetAppProvider() override { return m_pProvider; }
+ void SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) override;
+ IXFA_MenuHandler* GetMenuHandler() override;
+
+ // IFWL_AdapterNative:
+ IFWL_AdapterWidgetMgr* GetWidgetMgr(
+ IFWL_WidgetMgrDelegate* pDelegate) override;
+ IFWL_AdapterThreadMgr* GetThreadMgr() override;
+ IFWL_AdapterTimerMgr* GetTimerMgr() override;
+ IFWL_AdapterCursorMgr* GetCursorMgr() override;
+ IFWL_AdapterMonitorMgr* GetMonitorMgr() override;
+ IFWL_AdapterClipboardMgr* GetClipboardMgr() override;
+
+ CXFA_FontMgr* GetXFAFontMgr();
+ IFX_FontMgr* GetFDEFontMgr();
+ CXFA_FWLTheme* GetFWLTheme();
+ IFWL_WidgetMgrDelegate* GetWidgetMgrDelegate() {
+ return m_pWidgetMgrDelegate;
+ }
+
+ protected:
+ CXFA_FFDocHandler* m_pDocHandler;
+ IFWL_App* m_pFWLApp;
+ CXFA_FWLTheme* m_pFWLTheme;
+ IXFA_AppProvider* m_pProvider;
+ CXFA_FontMgr* m_pFontMgr;
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+ IFX_FontSourceEnum* m_pFontSource;
+#endif
+ CXFA_FWLAdapterWidgetMgr* m_pAdapterWidgetMgr;
+ IFWL_WidgetMgrDelegate* m_pWidgetMgrDelegate;
+ IFX_FontMgr* m_pFDEFontMgr;
+ CXFA_FFMenuHandler* m_pMenuHandler;
+ CFWL_SDAdapterThreadMgr* m_pAdapterThreadMgr;
+};
+
+#endif // XFA_FFAPP_H_
diff --git a/xfa/src/fxfa/src/app/xfa_ffbarcode.cpp b/xfa/src/fxfa/src/app/xfa_ffbarcode.cpp
index a3e842676f..952e7f5648 100644
--- a/xfa/src/fxfa/src/app/xfa_ffbarcode.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffbarcode.cpp
@@ -1,232 +1,232 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_fftextedit.h"
-#include "xfa_ffbarcode.h"
-static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName(
- const CFX_WideStringC& wsName);
-CXFA_FFBarcode::CXFA_FFBarcode(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFTextEdit(pPageView, pDataAcc) {}
-CXFA_FFBarcode::~CXFA_FFBarcode() {}
-FX_BOOL CXFA_FFBarcode::LoadWidget() {
- CFWL_Barcode* pFWLBarcode = CFWL_Barcode::Create();
- if (pFWLBarcode) {
- pFWLBarcode->Initialize();
- }
- m_pNormalWidget = pFWLBarcode;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
- pFWLBarcode->SetText(wsText);
- UpdateWidgetProperty();
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFBarcode::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
- RenderCaption(pGS, &mtRotate);
- CFX_RectF rtWidget;
- m_pNormalWidget->GetWidgetRect(rtWidget);
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
- mt.Concat(mtRotate);
- m_pNormalWidget->DrawWidget(pGS, &mt);
-}
-void CXFA_FFBarcode::UpdateWidgetProperty() {
- CXFA_FFTextEdit::UpdateWidgetProperty();
- CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget;
- CFX_WideString wsType = GetDataAcc()->GetBarcodeType();
- XFA_LPCBARCODETYPEENUMINFO pBarcodeTypeInfo =
- XFA_GetBarcodeTypeByName(wsType);
- pBarCodeWidget->SetType(pBarcodeTypeInfo->eBCType);
- CXFA_WidgetAcc* pAcc = GetDataAcc();
- int32_t intVal;
- FX_CHAR charVal;
- FX_BOOL boolVal;
- FX_FLOAT floatVal;
- if (pAcc->GetBarcodeAttribute_CharEncoding(intVal)) {
- pBarCodeWidget->SetCharEncoding((BC_CHAR_ENCODING)intVal);
- }
- if (pAcc->GetBarcodeAttribute_Checksum(intVal)) {
- pBarCodeWidget->SetCalChecksum(intVal);
- }
- if (pAcc->GetBarcodeAttribute_DataLength(intVal)) {
- pBarCodeWidget->SetDataLength(intVal);
- }
- if (pAcc->GetBarcodeAttribute_StartChar(charVal)) {
- pBarCodeWidget->SetStartChar(charVal);
- }
- if (pAcc->GetBarcodeAttribute_EndChar(charVal)) {
- pBarCodeWidget->SetEndChar(charVal);
- }
- if (pAcc->GetBarcodeAttribute_ECLevel(intVal)) {
- pBarCodeWidget->SetErrorCorrectionLevel(intVal);
- }
- if (pAcc->GetBarcodeAttribute_ModuleWidth(intVal)) {
- pBarCodeWidget->SetModuleWidth(intVal);
- }
- if (pAcc->GetBarcodeAttribute_ModuleHeight(intVal)) {
- pBarCodeWidget->SetModuleHeight(intVal);
- }
- if (pAcc->GetBarcodeAttribute_PrintChecksum(boolVal)) {
- pBarCodeWidget->SetPrintChecksum(boolVal);
- }
- if (pAcc->GetBarcodeAttribute_TextLocation(intVal)) {
- pBarCodeWidget->SetTextLocation((BC_TEXT_LOC)intVal);
- }
- if (pAcc->GetBarcodeAttribute_Truncate(boolVal)) {
- pBarCodeWidget->SetTruncated(boolVal);
- }
- if (pAcc->GetBarcodeAttribute_WideNarrowRatio(floatVal)) {
- pBarCodeWidget->SetWideNarrowRatio((int32_t)floatVal);
- }
- if (pBarcodeTypeInfo->eName == XFA_BARCODETYPE_code3Of9 ||
- pBarcodeTypeInfo->eName == XFA_BARCODETYPE_ean8 ||
- pBarcodeTypeInfo->eName == XFA_BARCODETYPE_ean13 ||
- pBarcodeTypeInfo->eName == XFA_BARCODETYPE_upcA) {
- pBarCodeWidget->SetPrintChecksum(TRUE);
- }
-}
-FX_BOOL CXFA_FFBarcode::OnLButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget;
- if (!pBarCodeWidget || pBarCodeWidget->IsProtectedType()) {
- return FALSE;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- return CXFA_FFTextEdit::OnLButtonDown(dwFlags, fx, fy);
-}
-FX_BOOL CXFA_FFBarcode::OnRButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget;
- if (!pBarCodeWidget || pBarCodeWidget->IsProtectedType()) {
- return FALSE;
- }
- return CXFA_FFTextEdit::OnRButtonDown(dwFlags, fx, fy);
-}
-extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[] = {
- {0x7fb4a18, L"ean13", XFA_BARCODETYPE_ean13, BC_EAN13},
- {0x8d13a3d, L"code11", XFA_BARCODETYPE_code11, BC_UNKNOWN},
- {0x8d149a8, L"code49", XFA_BARCODETYPE_code49, BC_UNKNOWN},
- {0x8d16347, L"code93", XFA_BARCODETYPE_code93, BC_UNKNOWN},
- {0x91a92e2, L"upsMaxicode", XFA_BARCODETYPE_upsMaxicode, BC_UNKNOWN},
- {0xa7d48dc, L"fim", XFA_BARCODETYPE_fim, BC_UNKNOWN},
- {0xb359fe9, L"msi", XFA_BARCODETYPE_msi, BC_UNKNOWN},
- {0x121f738c, L"code2Of5Matrix", XFA_BARCODETYPE_code2Of5Matrix, BC_UNKNOWN},
- {0x15358616, L"ucc128", XFA_BARCODETYPE_ucc128, BC_UNKNOWN},
- {0x1f4bfa05, L"rfid", XFA_BARCODETYPE_rfid, BC_UNKNOWN},
- {0x1fda71bc, L"rss14Stacked", XFA_BARCODETYPE_rss14Stacked, BC_UNKNOWN},
- {0x22065087, L"ean8add2", XFA_BARCODETYPE_ean8add2, BC_UNKNOWN},
- {0x2206508a, L"ean8add5", XFA_BARCODETYPE_ean8add5, BC_UNKNOWN},
- {0x2278366c, L"codabar", XFA_BARCODETYPE_codabar, BC_CODABAR},
- {0x2a039a8d, L"telepen", XFA_BARCODETYPE_telepen, BC_UNKNOWN},
- {0x323ed337, L"upcApwcd", XFA_BARCODETYPE_upcApwcd, BC_UNKNOWN},
- {0x347a1846, L"postUSIMB", XFA_BARCODETYPE_postUSIMB, BC_UNKNOWN},
- {0x391bb836, L"code128", XFA_BARCODETYPE_code128, BC_CODE128},
- {0x398eddaf, L"dataMatrix", XFA_BARCODETYPE_dataMatrix, BC_DATAMATRIX},
- {0x3cff60a8, L"upcEadd2", XFA_BARCODETYPE_upcEadd2, BC_UNKNOWN},
- {0x3cff60ab, L"upcEadd5", XFA_BARCODETYPE_upcEadd5, BC_UNKNOWN},
- {0x402cb188, L"code2Of5Standard", XFA_BARCODETYPE_code2Of5Standard,
- BC_UNKNOWN},
- {0x411764f7, L"aztec", XFA_BARCODETYPE_aztec, BC_UNKNOWN},
- {0x44d4e84c, L"ean8", XFA_BARCODETYPE_ean8, BC_EAN8},
- {0x48468902, L"ucc128sscc", XFA_BARCODETYPE_ucc128sscc, BC_UNKNOWN},
- {0x4880aea4, L"upcAadd2", XFA_BARCODETYPE_upcAadd2, BC_UNKNOWN},
- {0x4880aea7, L"upcAadd5", XFA_BARCODETYPE_upcAadd5, BC_UNKNOWN},
- {0x54f18256, L"code2Of5Industrial", XFA_BARCODETYPE_code2Of5Industrial,
- BC_UNKNOWN},
- {0x58e15f25, L"rss14Limited", XFA_BARCODETYPE_rss14Limited, BC_UNKNOWN},
- {0x5c08d1b9, L"postAUSReplyPaid", XFA_BARCODETYPE_postAUSReplyPaid,
- BC_UNKNOWN},
- {0x5fa700bd, L"rss14", XFA_BARCODETYPE_rss14, BC_UNKNOWN},
- {0x631a7e35, L"logmars", XFA_BARCODETYPE_logmars, BC_UNKNOWN},
- {0x6a236236, L"pdf417", XFA_BARCODETYPE_pdf417, BC_PDF417},
- {0x6d098ece, L"upcean2", XFA_BARCODETYPE_upcean2, BC_UNKNOWN},
- {0x6d098ed1, L"upcean5", XFA_BARCODETYPE_upcean5, BC_UNKNOWN},
- {0x76b04eed, L"code3Of9extended", XFA_BARCODETYPE_code3Of9extended,
- BC_UNKNOWN},
- {0x7c7db84a, L"maxicode", XFA_BARCODETYPE_maxicode, BC_UNKNOWN},
- {0x8266f7f7, L"ucc128random", XFA_BARCODETYPE_ucc128random, BC_UNKNOWN},
- {0x83eca147, L"postUSDPBC", XFA_BARCODETYPE_postUSDPBC, BC_UNKNOWN},
- {0x8dd71de0, L"postAUSStandard", XFA_BARCODETYPE_postAUSStandard,
- BC_UNKNOWN},
- {0x98adad85, L"plessey", XFA_BARCODETYPE_plessey, BC_UNKNOWN},
- {0x9f84cce6, L"ean13pwcd", XFA_BARCODETYPE_ean13pwcd, BC_UNKNOWN},
- {0xb514fbe9, L"upcA", XFA_BARCODETYPE_upcA, BC_UPCA},
- {0xb514fbed, L"upcE", XFA_BARCODETYPE_upcE, BC_UNKNOWN},
- {0xb5c6a853, L"ean13add2", XFA_BARCODETYPE_ean13add2, BC_UNKNOWN},
- {0xb5c6a856, L"ean13add5", XFA_BARCODETYPE_ean13add5, BC_UNKNOWN},
- {0xb81fc512, L"postUKRM4SCC", XFA_BARCODETYPE_postUKRM4SCC, BC_UNKNOWN},
- {0xbad34b22, L"code128SSCC", XFA_BARCODETYPE_code128SSCC, BC_UNKNOWN},
- {0xbfbe0cf6, L"postUS5Zip", XFA_BARCODETYPE_postUS5Zip, BC_UNKNOWN},
- {0xc56618e8, L"pdf417macro", XFA_BARCODETYPE_pdf417macro, BC_UNKNOWN},
- {0xca730f8a, L"code2Of5Interleaved", XFA_BARCODETYPE_code2Of5Interleaved,
- BC_UNKNOWN},
- {0xd0097ac6, L"rss14Expanded", XFA_BARCODETYPE_rss14Expanded, BC_UNKNOWN},
- {0xd25a0240, L"postAUSCust2", XFA_BARCODETYPE_postAUSCust2, BC_UNKNOWN},
- {0xd25a0241, L"postAUSCust3", XFA_BARCODETYPE_postAUSCust3, BC_UNKNOWN},
- {0xd53ed3e7, L"rss14Truncated", XFA_BARCODETYPE_rss14Truncated, BC_UNKNOWN},
- {0xe72bcd57, L"code128A", XFA_BARCODETYPE_code128A, BC_UNKNOWN},
- {0xe72bcd58, L"code128B", XFA_BARCODETYPE_code128B, BC_CODE128_B},
- {0xe72bcd59, L"code128C", XFA_BARCODETYPE_code128C, BC_CODE128_C},
- {0xee83c50f, L"rss14StackedOmni", XFA_BARCODETYPE_rss14StackedOmni,
- BC_UNKNOWN},
- {0xf2a18f7e, L"QRCode", XFA_BARCODETYPE_QRCode, BC_QR_CODE},
- {0xfaeaf37f, L"postUSStandard", XFA_BARCODETYPE_postUSStandard, BC_UNKNOWN},
- {0xfb48155c, L"code3Of9", XFA_BARCODETYPE_code3Of9, BC_CODE39},
-};
-extern const int32_t g_iXFABarcodeTypeCount =
- sizeof(g_XFABarCodeTypeEnumData) / sizeof(XFA_BARCODETYPEENUMINFO);
-static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName(
- const CFX_WideStringC& wsName) {
- int32_t iLength = wsName.GetLength();
- if (iLength == 0) {
- return NULL;
- }
- uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength, TRUE);
- int32_t iStart = 0, iEnd = g_iXFABarcodeTypeCount - 1;
- do {
- int32_t iMid = (iStart + iEnd) / 2;
- XFA_LPCBARCODETYPEENUMINFO pInfo = g_XFABarCodeTypeEnumData + iMid;
- if (uHash == pInfo->uHash) {
- return pInfo;
- } else if (uHash < pInfo->uHash) {
- iEnd = iMid - 1;
- } else {
- iStart = iMid + 1;
- }
- } while (iStart <= iEnd);
- return NULL;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_fftextedit.h"
+#include "xfa_ffbarcode.h"
+static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName(
+ const CFX_WideStringC& wsName);
+CXFA_FFBarcode::CXFA_FFBarcode(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFTextEdit(pPageView, pDataAcc) {}
+CXFA_FFBarcode::~CXFA_FFBarcode() {}
+FX_BOOL CXFA_FFBarcode::LoadWidget() {
+ CFWL_Barcode* pFWLBarcode = CFWL_Barcode::Create();
+ if (pFWLBarcode) {
+ pFWLBarcode->Initialize();
+ }
+ m_pNormalWidget = pFWLBarcode;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ pFWLBarcode->SetText(wsText);
+ UpdateWidgetProperty();
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFBarcode::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
+ RenderCaption(pGS, &mtRotate);
+ CFX_RectF rtWidget;
+ m_pNormalWidget->GetWidgetRect(rtWidget);
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
+ mt.Concat(mtRotate);
+ m_pNormalWidget->DrawWidget(pGS, &mt);
+}
+void CXFA_FFBarcode::UpdateWidgetProperty() {
+ CXFA_FFTextEdit::UpdateWidgetProperty();
+ CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget;
+ CFX_WideString wsType = GetDataAcc()->GetBarcodeType();
+ XFA_LPCBARCODETYPEENUMINFO pBarcodeTypeInfo =
+ XFA_GetBarcodeTypeByName(wsType);
+ pBarCodeWidget->SetType(pBarcodeTypeInfo->eBCType);
+ CXFA_WidgetAcc* pAcc = GetDataAcc();
+ int32_t intVal;
+ FX_CHAR charVal;
+ FX_BOOL boolVal;
+ FX_FLOAT floatVal;
+ if (pAcc->GetBarcodeAttribute_CharEncoding(intVal)) {
+ pBarCodeWidget->SetCharEncoding((BC_CHAR_ENCODING)intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_Checksum(intVal)) {
+ pBarCodeWidget->SetCalChecksum(intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_DataLength(intVal)) {
+ pBarCodeWidget->SetDataLength(intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_StartChar(charVal)) {
+ pBarCodeWidget->SetStartChar(charVal);
+ }
+ if (pAcc->GetBarcodeAttribute_EndChar(charVal)) {
+ pBarCodeWidget->SetEndChar(charVal);
+ }
+ if (pAcc->GetBarcodeAttribute_ECLevel(intVal)) {
+ pBarCodeWidget->SetErrorCorrectionLevel(intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_ModuleWidth(intVal)) {
+ pBarCodeWidget->SetModuleWidth(intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_ModuleHeight(intVal)) {
+ pBarCodeWidget->SetModuleHeight(intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_PrintChecksum(boolVal)) {
+ pBarCodeWidget->SetPrintChecksum(boolVal);
+ }
+ if (pAcc->GetBarcodeAttribute_TextLocation(intVal)) {
+ pBarCodeWidget->SetTextLocation((BC_TEXT_LOC)intVal);
+ }
+ if (pAcc->GetBarcodeAttribute_Truncate(boolVal)) {
+ pBarCodeWidget->SetTruncated(boolVal);
+ }
+ if (pAcc->GetBarcodeAttribute_WideNarrowRatio(floatVal)) {
+ pBarCodeWidget->SetWideNarrowRatio((int32_t)floatVal);
+ }
+ if (pBarcodeTypeInfo->eName == XFA_BARCODETYPE_code3Of9 ||
+ pBarcodeTypeInfo->eName == XFA_BARCODETYPE_ean8 ||
+ pBarcodeTypeInfo->eName == XFA_BARCODETYPE_ean13 ||
+ pBarcodeTypeInfo->eName == XFA_BARCODETYPE_upcA) {
+ pBarCodeWidget->SetPrintChecksum(TRUE);
+ }
+}
+FX_BOOL CXFA_FFBarcode::OnLButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget;
+ if (!pBarCodeWidget || pBarCodeWidget->IsProtectedType()) {
+ return FALSE;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ return CXFA_FFTextEdit::OnLButtonDown(dwFlags, fx, fy);
+}
+FX_BOOL CXFA_FFBarcode::OnRButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ CFWL_Barcode* pBarCodeWidget = (CFWL_Barcode*)m_pNormalWidget;
+ if (!pBarCodeWidget || pBarCodeWidget->IsProtectedType()) {
+ return FALSE;
+ }
+ return CXFA_FFTextEdit::OnRButtonDown(dwFlags, fx, fy);
+}
+extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[] = {
+ {0x7fb4a18, L"ean13", XFA_BARCODETYPE_ean13, BC_EAN13},
+ {0x8d13a3d, L"code11", XFA_BARCODETYPE_code11, BC_UNKNOWN},
+ {0x8d149a8, L"code49", XFA_BARCODETYPE_code49, BC_UNKNOWN},
+ {0x8d16347, L"code93", XFA_BARCODETYPE_code93, BC_UNKNOWN},
+ {0x91a92e2, L"upsMaxicode", XFA_BARCODETYPE_upsMaxicode, BC_UNKNOWN},
+ {0xa7d48dc, L"fim", XFA_BARCODETYPE_fim, BC_UNKNOWN},
+ {0xb359fe9, L"msi", XFA_BARCODETYPE_msi, BC_UNKNOWN},
+ {0x121f738c, L"code2Of5Matrix", XFA_BARCODETYPE_code2Of5Matrix, BC_UNKNOWN},
+ {0x15358616, L"ucc128", XFA_BARCODETYPE_ucc128, BC_UNKNOWN},
+ {0x1f4bfa05, L"rfid", XFA_BARCODETYPE_rfid, BC_UNKNOWN},
+ {0x1fda71bc, L"rss14Stacked", XFA_BARCODETYPE_rss14Stacked, BC_UNKNOWN},
+ {0x22065087, L"ean8add2", XFA_BARCODETYPE_ean8add2, BC_UNKNOWN},
+ {0x2206508a, L"ean8add5", XFA_BARCODETYPE_ean8add5, BC_UNKNOWN},
+ {0x2278366c, L"codabar", XFA_BARCODETYPE_codabar, BC_CODABAR},
+ {0x2a039a8d, L"telepen", XFA_BARCODETYPE_telepen, BC_UNKNOWN},
+ {0x323ed337, L"upcApwcd", XFA_BARCODETYPE_upcApwcd, BC_UNKNOWN},
+ {0x347a1846, L"postUSIMB", XFA_BARCODETYPE_postUSIMB, BC_UNKNOWN},
+ {0x391bb836, L"code128", XFA_BARCODETYPE_code128, BC_CODE128},
+ {0x398eddaf, L"dataMatrix", XFA_BARCODETYPE_dataMatrix, BC_DATAMATRIX},
+ {0x3cff60a8, L"upcEadd2", XFA_BARCODETYPE_upcEadd2, BC_UNKNOWN},
+ {0x3cff60ab, L"upcEadd5", XFA_BARCODETYPE_upcEadd5, BC_UNKNOWN},
+ {0x402cb188, L"code2Of5Standard", XFA_BARCODETYPE_code2Of5Standard,
+ BC_UNKNOWN},
+ {0x411764f7, L"aztec", XFA_BARCODETYPE_aztec, BC_UNKNOWN},
+ {0x44d4e84c, L"ean8", XFA_BARCODETYPE_ean8, BC_EAN8},
+ {0x48468902, L"ucc128sscc", XFA_BARCODETYPE_ucc128sscc, BC_UNKNOWN},
+ {0x4880aea4, L"upcAadd2", XFA_BARCODETYPE_upcAadd2, BC_UNKNOWN},
+ {0x4880aea7, L"upcAadd5", XFA_BARCODETYPE_upcAadd5, BC_UNKNOWN},
+ {0x54f18256, L"code2Of5Industrial", XFA_BARCODETYPE_code2Of5Industrial,
+ BC_UNKNOWN},
+ {0x58e15f25, L"rss14Limited", XFA_BARCODETYPE_rss14Limited, BC_UNKNOWN},
+ {0x5c08d1b9, L"postAUSReplyPaid", XFA_BARCODETYPE_postAUSReplyPaid,
+ BC_UNKNOWN},
+ {0x5fa700bd, L"rss14", XFA_BARCODETYPE_rss14, BC_UNKNOWN},
+ {0x631a7e35, L"logmars", XFA_BARCODETYPE_logmars, BC_UNKNOWN},
+ {0x6a236236, L"pdf417", XFA_BARCODETYPE_pdf417, BC_PDF417},
+ {0x6d098ece, L"upcean2", XFA_BARCODETYPE_upcean2, BC_UNKNOWN},
+ {0x6d098ed1, L"upcean5", XFA_BARCODETYPE_upcean5, BC_UNKNOWN},
+ {0x76b04eed, L"code3Of9extended", XFA_BARCODETYPE_code3Of9extended,
+ BC_UNKNOWN},
+ {0x7c7db84a, L"maxicode", XFA_BARCODETYPE_maxicode, BC_UNKNOWN},
+ {0x8266f7f7, L"ucc128random", XFA_BARCODETYPE_ucc128random, BC_UNKNOWN},
+ {0x83eca147, L"postUSDPBC", XFA_BARCODETYPE_postUSDPBC, BC_UNKNOWN},
+ {0x8dd71de0, L"postAUSStandard", XFA_BARCODETYPE_postAUSStandard,
+ BC_UNKNOWN},
+ {0x98adad85, L"plessey", XFA_BARCODETYPE_plessey, BC_UNKNOWN},
+ {0x9f84cce6, L"ean13pwcd", XFA_BARCODETYPE_ean13pwcd, BC_UNKNOWN},
+ {0xb514fbe9, L"upcA", XFA_BARCODETYPE_upcA, BC_UPCA},
+ {0xb514fbed, L"upcE", XFA_BARCODETYPE_upcE, BC_UNKNOWN},
+ {0xb5c6a853, L"ean13add2", XFA_BARCODETYPE_ean13add2, BC_UNKNOWN},
+ {0xb5c6a856, L"ean13add5", XFA_BARCODETYPE_ean13add5, BC_UNKNOWN},
+ {0xb81fc512, L"postUKRM4SCC", XFA_BARCODETYPE_postUKRM4SCC, BC_UNKNOWN},
+ {0xbad34b22, L"code128SSCC", XFA_BARCODETYPE_code128SSCC, BC_UNKNOWN},
+ {0xbfbe0cf6, L"postUS5Zip", XFA_BARCODETYPE_postUS5Zip, BC_UNKNOWN},
+ {0xc56618e8, L"pdf417macro", XFA_BARCODETYPE_pdf417macro, BC_UNKNOWN},
+ {0xca730f8a, L"code2Of5Interleaved", XFA_BARCODETYPE_code2Of5Interleaved,
+ BC_UNKNOWN},
+ {0xd0097ac6, L"rss14Expanded", XFA_BARCODETYPE_rss14Expanded, BC_UNKNOWN},
+ {0xd25a0240, L"postAUSCust2", XFA_BARCODETYPE_postAUSCust2, BC_UNKNOWN},
+ {0xd25a0241, L"postAUSCust3", XFA_BARCODETYPE_postAUSCust3, BC_UNKNOWN},
+ {0xd53ed3e7, L"rss14Truncated", XFA_BARCODETYPE_rss14Truncated, BC_UNKNOWN},
+ {0xe72bcd57, L"code128A", XFA_BARCODETYPE_code128A, BC_UNKNOWN},
+ {0xe72bcd58, L"code128B", XFA_BARCODETYPE_code128B, BC_CODE128_B},
+ {0xe72bcd59, L"code128C", XFA_BARCODETYPE_code128C, BC_CODE128_C},
+ {0xee83c50f, L"rss14StackedOmni", XFA_BARCODETYPE_rss14StackedOmni,
+ BC_UNKNOWN},
+ {0xf2a18f7e, L"QRCode", XFA_BARCODETYPE_QRCode, BC_QR_CODE},
+ {0xfaeaf37f, L"postUSStandard", XFA_BARCODETYPE_postUSStandard, BC_UNKNOWN},
+ {0xfb48155c, L"code3Of9", XFA_BARCODETYPE_code3Of9, BC_CODE39},
+};
+extern const int32_t g_iXFABarcodeTypeCount =
+ sizeof(g_XFABarCodeTypeEnumData) / sizeof(XFA_BARCODETYPEENUMINFO);
+static XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName(
+ const CFX_WideStringC& wsName) {
+ int32_t iLength = wsName.GetLength();
+ if (iLength == 0) {
+ return NULL;
+ }
+ uint32_t uHash = FX_HashCode_String_GetW(wsName.GetPtr(), iLength, TRUE);
+ int32_t iStart = 0, iEnd = g_iXFABarcodeTypeCount - 1;
+ do {
+ int32_t iMid = (iStart + iEnd) / 2;
+ XFA_LPCBARCODETYPEENUMINFO pInfo = g_XFABarCodeTypeEnumData + iMid;
+ if (uHash == pInfo->uHash) {
+ return pInfo;
+ } else if (uHash < pInfo->uHash) {
+ iEnd = iMid - 1;
+ } else {
+ iStart = iMid + 1;
+ }
+ } while (iStart <= iEnd);
+ return NULL;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffbarcode.h b/xfa/src/fxfa/src/app/xfa_ffbarcode.h
index df38343ed3..0d52486d16 100644
--- a/xfa/src/fxfa/src/app/xfa_ffbarcode.h
+++ b/xfa/src/fxfa/src/app/xfa_ffbarcode.h
@@ -1,95 +1,95 @@
-// 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 _FXFA_FORMFILLER_BARCODE_IMP_H
-#define _FXFA_FORMFILLER_BARCODE_IMP_H
-class CXFA_FFTextEdit;
-class CXFA_FFBarcode : public CXFA_FFTextEdit {
- public:
- CXFA_FFBarcode(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFBarcode();
- virtual FX_BOOL LoadWidget();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual void UpdateWidgetProperty();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
-};
-enum XFA_BARCODETYPEENUM {
- XFA_BARCODETYPE_aztec,
- XFA_BARCODETYPE_codabar,
- XFA_BARCODETYPE_code11,
- XFA_BARCODETYPE_code128,
- XFA_BARCODETYPE_code128A,
- XFA_BARCODETYPE_code128B,
- XFA_BARCODETYPE_code128C,
- XFA_BARCODETYPE_code128SSCC,
- XFA_BARCODETYPE_code2Of5Industrial,
- XFA_BARCODETYPE_code2Of5Interleaved,
- XFA_BARCODETYPE_code2Of5Matrix,
- XFA_BARCODETYPE_code2Of5Standard,
- XFA_BARCODETYPE_code3Of9,
- XFA_BARCODETYPE_code3Of9extended,
- XFA_BARCODETYPE_code49,
- XFA_BARCODETYPE_code93,
- XFA_BARCODETYPE_dataMatrix,
- XFA_BARCODETYPE_ean13,
- XFA_BARCODETYPE_ean13add2,
- XFA_BARCODETYPE_ean13add5,
- XFA_BARCODETYPE_ean13pwcd,
- XFA_BARCODETYPE_ean8,
- XFA_BARCODETYPE_ean8add2,
- XFA_BARCODETYPE_ean8add5,
- XFA_BARCODETYPE_fim,
- XFA_BARCODETYPE_logmars,
- XFA_BARCODETYPE_maxicode,
- XFA_BARCODETYPE_msi,
- XFA_BARCODETYPE_pdf417,
- XFA_BARCODETYPE_pdf417macro,
- XFA_BARCODETYPE_plessey,
- XFA_BARCODETYPE_postAUSCust2,
- XFA_BARCODETYPE_postAUSCust3,
- XFA_BARCODETYPE_postAUSReplyPaid,
- XFA_BARCODETYPE_postAUSStandard,
- XFA_BARCODETYPE_postUKRM4SCC,
- XFA_BARCODETYPE_postUS5Zip,
- XFA_BARCODETYPE_postUSDPBC,
- XFA_BARCODETYPE_postUSIMB,
- XFA_BARCODETYPE_postUSStandard,
- XFA_BARCODETYPE_QRCode,
- XFA_BARCODETYPE_rfid,
- XFA_BARCODETYPE_rss14,
- XFA_BARCODETYPE_rss14Expanded,
- XFA_BARCODETYPE_rss14Limited,
- XFA_BARCODETYPE_rss14Stacked,
- XFA_BARCODETYPE_rss14StackedOmni,
- XFA_BARCODETYPE_rss14Truncated,
- XFA_BARCODETYPE_telepen,
- XFA_BARCODETYPE_ucc128,
- XFA_BARCODETYPE_ucc128random,
- XFA_BARCODETYPE_ucc128sscc,
- XFA_BARCODETYPE_upcA,
- XFA_BARCODETYPE_upcAadd2,
- XFA_BARCODETYPE_upcAadd5,
- XFA_BARCODETYPE_upcApwcd,
- XFA_BARCODETYPE_upcE,
- XFA_BARCODETYPE_upcEadd2,
- XFA_BARCODETYPE_upcEadd5,
- XFA_BARCODETYPE_upcean2,
- XFA_BARCODETYPE_upcean5,
- XFA_BARCODETYPE_upsMaxicode
-};
-struct XFA_BARCODETYPEENUMINFO {
- uint32_t uHash;
- const FX_WCHAR* pName;
- XFA_BARCODETYPEENUM eName;
- BC_TYPE eBCType;
-};
-typedef XFA_BARCODETYPEENUMINFO const* XFA_LPCBARCODETYPEENUMINFO;
-extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[];
-#endif
+// 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 _FXFA_FORMFILLER_BARCODE_IMP_H
+#define _FXFA_FORMFILLER_BARCODE_IMP_H
+class CXFA_FFTextEdit;
+class CXFA_FFBarcode : public CXFA_FFTextEdit {
+ public:
+ CXFA_FFBarcode(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFBarcode();
+ virtual FX_BOOL LoadWidget();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual void UpdateWidgetProperty();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+};
+enum XFA_BARCODETYPEENUM {
+ XFA_BARCODETYPE_aztec,
+ XFA_BARCODETYPE_codabar,
+ XFA_BARCODETYPE_code11,
+ XFA_BARCODETYPE_code128,
+ XFA_BARCODETYPE_code128A,
+ XFA_BARCODETYPE_code128B,
+ XFA_BARCODETYPE_code128C,
+ XFA_BARCODETYPE_code128SSCC,
+ XFA_BARCODETYPE_code2Of5Industrial,
+ XFA_BARCODETYPE_code2Of5Interleaved,
+ XFA_BARCODETYPE_code2Of5Matrix,
+ XFA_BARCODETYPE_code2Of5Standard,
+ XFA_BARCODETYPE_code3Of9,
+ XFA_BARCODETYPE_code3Of9extended,
+ XFA_BARCODETYPE_code49,
+ XFA_BARCODETYPE_code93,
+ XFA_BARCODETYPE_dataMatrix,
+ XFA_BARCODETYPE_ean13,
+ XFA_BARCODETYPE_ean13add2,
+ XFA_BARCODETYPE_ean13add5,
+ XFA_BARCODETYPE_ean13pwcd,
+ XFA_BARCODETYPE_ean8,
+ XFA_BARCODETYPE_ean8add2,
+ XFA_BARCODETYPE_ean8add5,
+ XFA_BARCODETYPE_fim,
+ XFA_BARCODETYPE_logmars,
+ XFA_BARCODETYPE_maxicode,
+ XFA_BARCODETYPE_msi,
+ XFA_BARCODETYPE_pdf417,
+ XFA_BARCODETYPE_pdf417macro,
+ XFA_BARCODETYPE_plessey,
+ XFA_BARCODETYPE_postAUSCust2,
+ XFA_BARCODETYPE_postAUSCust3,
+ XFA_BARCODETYPE_postAUSReplyPaid,
+ XFA_BARCODETYPE_postAUSStandard,
+ XFA_BARCODETYPE_postUKRM4SCC,
+ XFA_BARCODETYPE_postUS5Zip,
+ XFA_BARCODETYPE_postUSDPBC,
+ XFA_BARCODETYPE_postUSIMB,
+ XFA_BARCODETYPE_postUSStandard,
+ XFA_BARCODETYPE_QRCode,
+ XFA_BARCODETYPE_rfid,
+ XFA_BARCODETYPE_rss14,
+ XFA_BARCODETYPE_rss14Expanded,
+ XFA_BARCODETYPE_rss14Limited,
+ XFA_BARCODETYPE_rss14Stacked,
+ XFA_BARCODETYPE_rss14StackedOmni,
+ XFA_BARCODETYPE_rss14Truncated,
+ XFA_BARCODETYPE_telepen,
+ XFA_BARCODETYPE_ucc128,
+ XFA_BARCODETYPE_ucc128random,
+ XFA_BARCODETYPE_ucc128sscc,
+ XFA_BARCODETYPE_upcA,
+ XFA_BARCODETYPE_upcAadd2,
+ XFA_BARCODETYPE_upcAadd5,
+ XFA_BARCODETYPE_upcApwcd,
+ XFA_BARCODETYPE_upcE,
+ XFA_BARCODETYPE_upcEadd2,
+ XFA_BARCODETYPE_upcEadd5,
+ XFA_BARCODETYPE_upcean2,
+ XFA_BARCODETYPE_upcean5,
+ XFA_BARCODETYPE_upsMaxicode
+};
+struct XFA_BARCODETYPEENUMINFO {
+ uint32_t uHash;
+ const FX_WCHAR* pName;
+ XFA_BARCODETYPEENUM eName;
+ BC_TYPE eBCType;
+};
+typedef XFA_BARCODETYPEENUMINFO const* XFA_LPCBARCODETYPEENUMINFO;
+extern const XFA_BARCODETYPEENUMINFO g_XFABarCodeTypeEnumData[];
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffcheckbutton.cpp b/xfa/src/fxfa/src/app/xfa_ffcheckbutton.cpp
index 778775f7c5..2b0f3dc7ea 100644
--- a/xfa/src/fxfa/src/app/xfa_ffcheckbutton.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffcheckbutton.cpp
@@ -1,333 +1,333 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffcheckbutton.h"
-#include "xfa_ffexclgroup.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {
- m_rtCheckBox.Set(0, 0, 0, 0);
-}
-CXFA_FFCheckButton::~CXFA_FFCheckButton() {}
-FX_BOOL CXFA_FFCheckButton::LoadWidget() {
- CFWL_CheckBox* pCheckBox = CFWL_CheckBox::Create();
- pCheckBox->Initialize();
- m_pNormalWidget = pCheckBox;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- if (m_pDataAcc->IsRadioButton()) {
- pCheckBox->ModifyStylesEx(FWL_STYLEEXT_CKB_RadioButton, 0xFFFFFFFF);
- }
- m_pNormalWidget = (CFWL_Widget*)pCheckBox;
- m_pNormalWidget->SetPrivateData(m_pNormalWidget->GetWidget(), this, NULL);
- m_pNormalWidget->LockUpdate();
- UpdateWidgetProperty();
- XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState();
- SetFWLCheckState(eState);
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFCheckButton::UpdateWidgetProperty() {
- CFWL_CheckBox* pCheckBox = (CFWL_CheckBox*)m_pNormalWidget;
- if (!m_pNormalWidget) {
- return;
- }
- FX_FLOAT fSize = m_pDataAcc->GetCheckButtonSize();
- pCheckBox->SetBoxSize(fSize);
- FX_DWORD dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCross;
- int32_t iCheckMark = m_pDataAcc->GetCheckButtonMark();
- switch (iCheckMark) {
- case XFA_ATTRIBUTEENUM_Check:
- dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCheck;
- break;
- case XFA_ATTRIBUTEENUM_Circle:
- dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle;
- break;
- case XFA_ATTRIBUTEENUM_Cross:
- break;
- case XFA_ATTRIBUTEENUM_Diamond:
- dwStyleEx = FWL_STYLEEXT_CKB_SignShapeDiamond;
- break;
- case XFA_ATTRIBUTEENUM_Square:
- dwStyleEx = FWL_STYLEEXT_CKB_SignShapeSquare;
- break;
- case XFA_ATTRIBUTEENUM_Star:
- dwStyleEx = FWL_STYLEEXT_CKB_SignShapeStar;
- break;
- default: {
- int32_t iShape = m_pDataAcc->GetCheckButtonShape();
- if (iShape == XFA_ATTRIBUTEENUM_Round) {
- dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle;
- }
- } break;
- }
- if (m_pDataAcc->IsAllowNeutral()) {
- dwStyleEx |= FWL_STYLEEXT_CKB_3State;
- }
- pCheckBox->ModifyStylesEx(
- dwStyleEx, FWL_STYLEEXT_CKB_SignShapeMask | FWL_STYLEEXT_CKB_3State);
-}
-FX_BOOL CXFA_FFCheckButton::PerformLayout() {
- CXFA_FFWidget::PerformLayout();
- FX_FLOAT fCheckSize = m_pDataAcc->GetCheckButtonSize();
- CXFA_Margin mgWidget = m_pDataAcc->GetMargin();
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- if (mgWidget.IsExistInXML()) {
- XFA_RectWidthoutMargin(rtWidget, mgWidget);
- }
- int32_t iCapPlacement = -1;
- FX_FLOAT fCapReserve = 0;
- CXFA_Caption caption = m_pDataAcc->GetCaption();
- if (caption.IsExistInXML() && caption.GetPresence()) {
- m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width,
- rtWidget.height);
- iCapPlacement = caption.GetPlacementType();
- fCapReserve = caption.GetReserve();
- if (fCapReserve <= 0) {
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
- iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
- fCapReserve = rtWidget.height - fCheckSize;
- } else {
- fCapReserve = rtWidget.width - fCheckSize;
- }
- }
- }
- int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left;
- int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- iHorzAlign = para.GetHorizontalAlign();
- iVertAlign = para.GetVerticalAlign();
- }
- m_rtUI = rtWidget;
- CXFA_Margin mgCap = caption.GetMargin();
- switch (iCapPlacement) {
- case XFA_ATTRIBUTEENUM_Left: {
- m_rtCaption.width = fCapReserve;
- CapLeftRightPlacement(mgCap);
- m_rtUI.width -= fCapReserve;
- m_rtUI.left += fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Top: {
- m_rtCaption.height = fCapReserve;
- XFA_RectWidthoutMargin(m_rtCaption, mgCap);
- m_rtUI.height -= fCapReserve;
- m_rtUI.top += fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Right: {
- m_rtCaption.left = m_rtCaption.right() - fCapReserve;
- m_rtCaption.width = fCapReserve;
- CapLeftRightPlacement(mgCap);
- m_rtUI.width -= fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Bottom: {
- m_rtCaption.top = m_rtCaption.bottom() - fCapReserve;
- m_rtCaption.height = fCapReserve;
- XFA_RectWidthoutMargin(m_rtCaption, mgCap);
- m_rtUI.height -= fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Inline:
- break;
- default:
- iHorzAlign = XFA_ATTRIBUTEENUM_Right;
- break;
- }
- if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) {
- m_rtUI.left += (m_rtUI.width - fCheckSize) / 2;
- } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) {
- m_rtUI.left = m_rtUI.right() - fCheckSize;
- }
- if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) {
- m_rtUI.top += (m_rtUI.height - fCheckSize) / 2;
- } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) {
- m_rtUI.top = m_rtUI.bottom() - fCheckSize;
- }
- m_rtUI.width = fCheckSize;
- m_rtUI.height = fCheckSize;
- AddUIMargin(iCapPlacement);
- m_rtCheckBox = m_rtUI;
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- if (borderUI) {
- CXFA_Margin margin = borderUI.GetMargin();
- if (margin.IsExistInXML()) {
- XFA_RectWidthoutMargin(m_rtUI, margin);
- }
- }
- m_rtUI.Normalize();
- LayoutCaption();
- SetFWLRect();
- if (m_pNormalWidget) {
- m_pNormalWidget->Update();
- }
- return TRUE;
-}
-void CXFA_FFCheckButton::CapLeftRightPlacement(CXFA_Margin mgCap) {
- XFA_RectWidthoutMargin(m_rtCaption, mgCap);
- if (m_rtCaption.height < 0) {
- m_rtCaption.top += m_rtCaption.height;
- }
- if (m_rtCaption.width < 0) {
- m_rtCaption.left += m_rtCaption.width;
- m_rtCaption.width = -m_rtCaption.width;
- }
-}
-void CXFA_FFCheckButton::AddUIMargin(int32_t iCapPlacement) {
- CFX_RectF rtUIMargin;
- m_pDataAcc->GetUIMargin(rtUIMargin);
- m_rtUI.top -= rtUIMargin.top / 2 - rtUIMargin.height / 2;
- FX_FLOAT fLeftAddRight = rtUIMargin.left + rtUIMargin.width;
- FX_FLOAT fTopAddBottom = rtUIMargin.top + rtUIMargin.height;
- if (m_rtUI.width < fLeftAddRight) {
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Right ||
- iCapPlacement == XFA_ATTRIBUTEENUM_Left) {
- m_rtUI.left -= fLeftAddRight - m_rtUI.width;
- } else {
- m_rtUI.left -= 2 * (fLeftAddRight - m_rtUI.width);
- }
- m_rtUI.width += 2 * (fLeftAddRight - m_rtUI.width);
- }
- if (m_rtUI.height < fTopAddBottom) {
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) {
- m_rtUI.left -= fTopAddBottom - m_rtUI.height;
- }
- m_rtUI.top -= fTopAddBottom - m_rtUI.height;
- m_rtUI.height += 2 * (fTopAddBottom - m_rtUI.height);
- }
-}
-void CXFA_FFCheckButton::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- DrawBorder(pGS, borderUI, m_rtUI, &mtRotate,
- m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round
- ? XFA_DRAWBOX_ForceRound
- : 0);
- RenderCaption(pGS, &mtRotate);
- DrawHighlight(pGS, &mtRotate, dwStatus,
- m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round);
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, m_rtCheckBox.left, m_rtCheckBox.top);
- mt.Concat(mtRotate);
- GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
- pGS, &mt);
-}
-FX_BOOL CXFA_FFCheckButton::OnLButtonUp(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- if (!IsButtonDown()) {
- return FALSE;
- }
- SetButtonDown(FALSE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-XFA_CHECKSTATE CXFA_FFCheckButton::FWLState2XFAState() {
- XFA_CHECKSTATE eCheckState = XFA_CHECKSTATE_Off;
- FX_DWORD dwState = m_pNormalWidget->GetStates();
- if (dwState & FWL_STATE_CKB_Checked) {
- eCheckState = XFA_CHECKSTATE_On;
- } else if (dwState & FWL_STATE_CKB_Neutral) {
- eCheckState = XFA_CHECKSTATE_Neutral;
- }
- return eCheckState;
-}
-FX_BOOL CXFA_FFCheckButton::CommitData() {
- XFA_CHECKSTATE eCheckState = FWLState2XFAState();
- m_pDataAcc->SetCheckState(eCheckState, TRUE);
- return TRUE;
-}
-FX_BOOL CXFA_FFCheckButton::IsDataChanged() {
- XFA_CHECKSTATE eCheckState = FWLState2XFAState();
- return m_pDataAcc->GetCheckState() != eCheckState;
-}
-void CXFA_FFCheckButton::SetFWLCheckState(XFA_CHECKSTATE eCheckState) {
- if (eCheckState == XFA_CHECKSTATE_Neutral) {
- m_pNormalWidget->SetStates(FWL_STATE_CKB_Neutral, TRUE);
- } else {
- m_pNormalWidget->SetStates(FWL_STATE_CKB_Checked,
- eCheckState == XFA_CHECKSTATE_On);
- }
-}
-FX_BOOL CXFA_FFCheckButton::UpdateFWLData() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState();
- SetFWLCheckState(eState);
- m_pNormalWidget->Update();
- return TRUE;
-}
-int32_t CXFA_FFCheckButton::OnProcessMessage(CFWL_Message* pMessage) {
- return m_pOldDelegate->OnProcessMessage(pMessage);
-}
-FWL_ERR CXFA_FFCheckButton::OnProcessEvent(CFWL_Event* pEvent) {
- CXFA_FFField::OnProcessEvent(pEvent);
- FX_DWORD dwEventID = pEvent->GetClassID();
- switch (dwEventID) {
- case FWL_EVTHASH_CKB_CheckStateChanged: {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Change;
- m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
- CXFA_WidgetAcc* pFFExclGroup = m_pDataAcc->GetExclGroup();
- if (ProcessCommittedData()) {
- eParam.m_pTarget = pFFExclGroup;
- if (pFFExclGroup) {
- m_pDocView->AddValidateWidget(pFFExclGroup);
- m_pDocView->AddCalculateWidgetAcc(pFFExclGroup);
- pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
- }
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
- } else {
- SetFWLCheckState(m_pDataAcc->GetCheckState());
- }
- if (pFFExclGroup) {
- eParam.m_pTarget = pFFExclGroup;
- pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
- }
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
- break;
- }
- default: {}
- }
- return m_pOldDelegate->OnProcessEvent(pEvent);
-}
-FWL_ERR CXFA_FFCheckButton::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffcheckbutton.h"
+#include "xfa_ffexclgroup.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {
+ m_rtCheckBox.Set(0, 0, 0, 0);
+}
+CXFA_FFCheckButton::~CXFA_FFCheckButton() {}
+FX_BOOL CXFA_FFCheckButton::LoadWidget() {
+ CFWL_CheckBox* pCheckBox = CFWL_CheckBox::Create();
+ pCheckBox->Initialize();
+ m_pNormalWidget = pCheckBox;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ if (m_pDataAcc->IsRadioButton()) {
+ pCheckBox->ModifyStylesEx(FWL_STYLEEXT_CKB_RadioButton, 0xFFFFFFFF);
+ }
+ m_pNormalWidget = (CFWL_Widget*)pCheckBox;
+ m_pNormalWidget->SetPrivateData(m_pNormalWidget->GetWidget(), this, NULL);
+ m_pNormalWidget->LockUpdate();
+ UpdateWidgetProperty();
+ XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState();
+ SetFWLCheckState(eState);
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFCheckButton::UpdateWidgetProperty() {
+ CFWL_CheckBox* pCheckBox = (CFWL_CheckBox*)m_pNormalWidget;
+ if (!m_pNormalWidget) {
+ return;
+ }
+ FX_FLOAT fSize = m_pDataAcc->GetCheckButtonSize();
+ pCheckBox->SetBoxSize(fSize);
+ FX_DWORD dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCross;
+ int32_t iCheckMark = m_pDataAcc->GetCheckButtonMark();
+ switch (iCheckMark) {
+ case XFA_ATTRIBUTEENUM_Check:
+ dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCheck;
+ break;
+ case XFA_ATTRIBUTEENUM_Circle:
+ dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle;
+ break;
+ case XFA_ATTRIBUTEENUM_Cross:
+ break;
+ case XFA_ATTRIBUTEENUM_Diamond:
+ dwStyleEx = FWL_STYLEEXT_CKB_SignShapeDiamond;
+ break;
+ case XFA_ATTRIBUTEENUM_Square:
+ dwStyleEx = FWL_STYLEEXT_CKB_SignShapeSquare;
+ break;
+ case XFA_ATTRIBUTEENUM_Star:
+ dwStyleEx = FWL_STYLEEXT_CKB_SignShapeStar;
+ break;
+ default: {
+ int32_t iShape = m_pDataAcc->GetCheckButtonShape();
+ if (iShape == XFA_ATTRIBUTEENUM_Round) {
+ dwStyleEx = FWL_STYLEEXT_CKB_SignShapeCircle;
+ }
+ } break;
+ }
+ if (m_pDataAcc->IsAllowNeutral()) {
+ dwStyleEx |= FWL_STYLEEXT_CKB_3State;
+ }
+ pCheckBox->ModifyStylesEx(
+ dwStyleEx, FWL_STYLEEXT_CKB_SignShapeMask | FWL_STYLEEXT_CKB_3State);
+}
+FX_BOOL CXFA_FFCheckButton::PerformLayout() {
+ CXFA_FFWidget::PerformLayout();
+ FX_FLOAT fCheckSize = m_pDataAcc->GetCheckButtonSize();
+ CXFA_Margin mgWidget = m_pDataAcc->GetMargin();
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ if (mgWidget.IsExistInXML()) {
+ XFA_RectWidthoutMargin(rtWidget, mgWidget);
+ }
+ int32_t iCapPlacement = -1;
+ FX_FLOAT fCapReserve = 0;
+ CXFA_Caption caption = m_pDataAcc->GetCaption();
+ if (caption.IsExistInXML() && caption.GetPresence()) {
+ m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width,
+ rtWidget.height);
+ iCapPlacement = caption.GetPlacementType();
+ fCapReserve = caption.GetReserve();
+ if (fCapReserve <= 0) {
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
+ iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
+ fCapReserve = rtWidget.height - fCheckSize;
+ } else {
+ fCapReserve = rtWidget.width - fCheckSize;
+ }
+ }
+ }
+ int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left;
+ int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ iHorzAlign = para.GetHorizontalAlign();
+ iVertAlign = para.GetVerticalAlign();
+ }
+ m_rtUI = rtWidget;
+ CXFA_Margin mgCap = caption.GetMargin();
+ switch (iCapPlacement) {
+ case XFA_ATTRIBUTEENUM_Left: {
+ m_rtCaption.width = fCapReserve;
+ CapLeftRightPlacement(mgCap);
+ m_rtUI.width -= fCapReserve;
+ m_rtUI.left += fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Top: {
+ m_rtCaption.height = fCapReserve;
+ XFA_RectWidthoutMargin(m_rtCaption, mgCap);
+ m_rtUI.height -= fCapReserve;
+ m_rtUI.top += fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Right: {
+ m_rtCaption.left = m_rtCaption.right() - fCapReserve;
+ m_rtCaption.width = fCapReserve;
+ CapLeftRightPlacement(mgCap);
+ m_rtUI.width -= fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Bottom: {
+ m_rtCaption.top = m_rtCaption.bottom() - fCapReserve;
+ m_rtCaption.height = fCapReserve;
+ XFA_RectWidthoutMargin(m_rtCaption, mgCap);
+ m_rtUI.height -= fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Inline:
+ break;
+ default:
+ iHorzAlign = XFA_ATTRIBUTEENUM_Right;
+ break;
+ }
+ if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) {
+ m_rtUI.left += (m_rtUI.width - fCheckSize) / 2;
+ } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) {
+ m_rtUI.left = m_rtUI.right() - fCheckSize;
+ }
+ if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) {
+ m_rtUI.top += (m_rtUI.height - fCheckSize) / 2;
+ } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) {
+ m_rtUI.top = m_rtUI.bottom() - fCheckSize;
+ }
+ m_rtUI.width = fCheckSize;
+ m_rtUI.height = fCheckSize;
+ AddUIMargin(iCapPlacement);
+ m_rtCheckBox = m_rtUI;
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ if (borderUI) {
+ CXFA_Margin margin = borderUI.GetMargin();
+ if (margin.IsExistInXML()) {
+ XFA_RectWidthoutMargin(m_rtUI, margin);
+ }
+ }
+ m_rtUI.Normalize();
+ LayoutCaption();
+ SetFWLRect();
+ if (m_pNormalWidget) {
+ m_pNormalWidget->Update();
+ }
+ return TRUE;
+}
+void CXFA_FFCheckButton::CapLeftRightPlacement(CXFA_Margin mgCap) {
+ XFA_RectWidthoutMargin(m_rtCaption, mgCap);
+ if (m_rtCaption.height < 0) {
+ m_rtCaption.top += m_rtCaption.height;
+ }
+ if (m_rtCaption.width < 0) {
+ m_rtCaption.left += m_rtCaption.width;
+ m_rtCaption.width = -m_rtCaption.width;
+ }
+}
+void CXFA_FFCheckButton::AddUIMargin(int32_t iCapPlacement) {
+ CFX_RectF rtUIMargin;
+ m_pDataAcc->GetUIMargin(rtUIMargin);
+ m_rtUI.top -= rtUIMargin.top / 2 - rtUIMargin.height / 2;
+ FX_FLOAT fLeftAddRight = rtUIMargin.left + rtUIMargin.width;
+ FX_FLOAT fTopAddBottom = rtUIMargin.top + rtUIMargin.height;
+ if (m_rtUI.width < fLeftAddRight) {
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Right ||
+ iCapPlacement == XFA_ATTRIBUTEENUM_Left) {
+ m_rtUI.left -= fLeftAddRight - m_rtUI.width;
+ } else {
+ m_rtUI.left -= 2 * (fLeftAddRight - m_rtUI.width);
+ }
+ m_rtUI.width += 2 * (fLeftAddRight - m_rtUI.width);
+ }
+ if (m_rtUI.height < fTopAddBottom) {
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) {
+ m_rtUI.left -= fTopAddBottom - m_rtUI.height;
+ }
+ m_rtUI.top -= fTopAddBottom - m_rtUI.height;
+ m_rtUI.height += 2 * (fTopAddBottom - m_rtUI.height);
+ }
+}
+void CXFA_FFCheckButton::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ DrawBorder(pGS, borderUI, m_rtUI, &mtRotate,
+ m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round
+ ? XFA_DRAWBOX_ForceRound
+ : 0);
+ RenderCaption(pGS, &mtRotate);
+ DrawHighlight(pGS, &mtRotate, dwStatus,
+ m_pDataAcc->GetCheckButtonShape() == XFA_ATTRIBUTEENUM_Round);
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, m_rtCheckBox.left, m_rtCheckBox.top);
+ mt.Concat(mtRotate);
+ GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
+ pGS, &mt);
+}
+FX_BOOL CXFA_FFCheckButton::OnLButtonUp(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ if (!IsButtonDown()) {
+ return FALSE;
+ }
+ SetButtonDown(FALSE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+XFA_CHECKSTATE CXFA_FFCheckButton::FWLState2XFAState() {
+ XFA_CHECKSTATE eCheckState = XFA_CHECKSTATE_Off;
+ FX_DWORD dwState = m_pNormalWidget->GetStates();
+ if (dwState & FWL_STATE_CKB_Checked) {
+ eCheckState = XFA_CHECKSTATE_On;
+ } else if (dwState & FWL_STATE_CKB_Neutral) {
+ eCheckState = XFA_CHECKSTATE_Neutral;
+ }
+ return eCheckState;
+}
+FX_BOOL CXFA_FFCheckButton::CommitData() {
+ XFA_CHECKSTATE eCheckState = FWLState2XFAState();
+ m_pDataAcc->SetCheckState(eCheckState, TRUE);
+ return TRUE;
+}
+FX_BOOL CXFA_FFCheckButton::IsDataChanged() {
+ XFA_CHECKSTATE eCheckState = FWLState2XFAState();
+ return m_pDataAcc->GetCheckState() != eCheckState;
+}
+void CXFA_FFCheckButton::SetFWLCheckState(XFA_CHECKSTATE eCheckState) {
+ if (eCheckState == XFA_CHECKSTATE_Neutral) {
+ m_pNormalWidget->SetStates(FWL_STATE_CKB_Neutral, TRUE);
+ } else {
+ m_pNormalWidget->SetStates(FWL_STATE_CKB_Checked,
+ eCheckState == XFA_CHECKSTATE_On);
+ }
+}
+FX_BOOL CXFA_FFCheckButton::UpdateFWLData() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState();
+ SetFWLCheckState(eState);
+ m_pNormalWidget->Update();
+ return TRUE;
+}
+int32_t CXFA_FFCheckButton::OnProcessMessage(CFWL_Message* pMessage) {
+ return m_pOldDelegate->OnProcessMessage(pMessage);
+}
+FWL_ERR CXFA_FFCheckButton::OnProcessEvent(CFWL_Event* pEvent) {
+ CXFA_FFField::OnProcessEvent(pEvent);
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ switch (dwEventID) {
+ case FWL_EVTHASH_CKB_CheckStateChanged: {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Change;
+ m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
+ CXFA_WidgetAcc* pFFExclGroup = m_pDataAcc->GetExclGroup();
+ if (ProcessCommittedData()) {
+ eParam.m_pTarget = pFFExclGroup;
+ if (pFFExclGroup) {
+ m_pDocView->AddValidateWidget(pFFExclGroup);
+ m_pDocView->AddCalculateWidgetAcc(pFFExclGroup);
+ pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
+ }
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
+ } else {
+ SetFWLCheckState(m_pDataAcc->GetCheckState());
+ }
+ if (pFFExclGroup) {
+ eParam.m_pTarget = pFFExclGroup;
+ pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
+ }
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
+ break;
+ }
+ default: {}
+ }
+ return m_pOldDelegate->OnProcessEvent(pEvent);
+}
+FWL_ERR CXFA_FFCheckButton::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffcheckbutton.h b/xfa/src/fxfa/src/app/xfa_ffcheckbutton.h
index ebb02a6121..fc05aefbc9 100644
--- a/xfa/src/fxfa/src/app/xfa_ffcheckbutton.h
+++ b/xfa/src/fxfa/src/app/xfa_ffcheckbutton.h
@@ -1,39 +1,39 @@
-// 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 _FXFA_FORMFILLER_CHECKBUTTON_IMP_H
-#define _FXFA_FORMFILLER_CHECKBUTTON_IMP_H
-class CXFA_FFExclGroup;
-class CXFA_FFCheckButton : public CXFA_FFField {
- public:
- CXFA_FFCheckButton(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFCheckButton();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
-
- virtual FX_BOOL LoadWidget();
- virtual FX_BOOL PerformLayout();
- virtual FX_BOOL UpdateFWLData();
- virtual void UpdateWidgetProperty();
- virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- void SetFWLCheckState(XFA_CHECKSTATE eCheckState);
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-
- protected:
- virtual FX_BOOL CommitData();
- virtual FX_BOOL IsDataChanged();
- void CapLeftRightPlacement(CXFA_Margin mgCap);
- void AddUIMargin(int32_t iCapPlacement);
- XFA_CHECKSTATE FWLState2XFAState();
- IFWL_WidgetDelegate* m_pOldDelegate;
- CFX_RectF m_rtCheckBox;
-};
-#endif
+// 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 _FXFA_FORMFILLER_CHECKBUTTON_IMP_H
+#define _FXFA_FORMFILLER_CHECKBUTTON_IMP_H
+class CXFA_FFExclGroup;
+class CXFA_FFCheckButton : public CXFA_FFField {
+ public:
+ CXFA_FFCheckButton(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFCheckButton();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+
+ virtual FX_BOOL LoadWidget();
+ virtual FX_BOOL PerformLayout();
+ virtual FX_BOOL UpdateFWLData();
+ virtual void UpdateWidgetProperty();
+ virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ void SetFWLCheckState(XFA_CHECKSTATE eCheckState);
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+ virtual FX_BOOL CommitData();
+ virtual FX_BOOL IsDataChanged();
+ void CapLeftRightPlacement(CXFA_Margin mgCap);
+ void AddUIMargin(int32_t iCapPlacement);
+ XFA_CHECKSTATE FWLState2XFAState();
+ IFWL_WidgetDelegate* m_pOldDelegate;
+ CFX_RectF m_rtCheckBox;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffchoicelist.cpp b/xfa/src/fxfa/src/app/xfa_ffchoicelist.cpp
index e6a4d4b0ad..6459dc72a3 100644
--- a/xfa/src/fxfa/src/app/xfa_ffchoicelist.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffchoicelist.cpp
@@ -1,540 +1,540 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffchoicelist.h"
-#include "xfa_ffdoc.h"
-CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
-CXFA_FFListBox::~CXFA_FFListBox() {
- if (m_pNormalWidget) {
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->UnregisterEventTarget(pWidget);
- }
-}
-FX_BOOL CXFA_FFListBox::LoadWidget() {
- CFWL_ListBox* pListBox = CFWL_ListBox::Create();
- pListBox->Initialize();
- pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground,
- 0xFFFFFFFF);
- m_pNormalWidget = (CFWL_Widget*)pListBox;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- CFX_WideStringArray wsLabelArray;
- m_pDataAcc->GetChoiceListItems(wsLabelArray, FALSE);
- int32_t iItems = wsLabelArray.GetSize();
- for (int32_t i = 0; i < iItems; i++) {
- pListBox->AddString(wsLabelArray[i]);
- }
- FX_DWORD dwExtendedStyle = FWL_STYLEEXT_LTB_ShowScrollBarFocus;
- if (m_pDataAcc->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
- dwExtendedStyle |= FWL_STYLEEXT_LTB_MultiSelection;
- }
- dwExtendedStyle |= GetAlignment();
- m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
- CFX_Int32Array iSelArray;
- m_pDataAcc->GetSelectedItems(iSelArray);
- int32_t iSelCount = iSelArray.GetSize();
- for (int32_t j = 0; j < iSelCount; j++) {
- FWL_HLISTITEM item = pListBox->GetItem(iSelArray[j]);
- pListBox->SetSelItem(item, TRUE);
- }
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-FX_BOOL CXFA_FFListBox::OnKillFocus(CXFA_FFWidget* pNewFocus) {
- FX_BOOL flag = ProcessCommittedData();
- if (!flag) {
- UpdateFWLData();
- }
- CXFA_FFField::OnKillFocus(pNewFocus);
- return TRUE;
-}
-FX_BOOL CXFA_FFListBox::CommitData() {
- FXSYS_assert(m_pNormalWidget != NULL);
- CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget;
- int32_t iSels = pListBox->CountSelItems();
- CFX_Int32Array iSelArray;
- for (int32_t i = 0; i < iSels; i++) {
- iSelArray.Add(pListBox->GetSelIndex(i));
- }
- m_pDataAcc->SetSelectdItems(iSelArray, TRUE);
- return TRUE;
-}
-FX_BOOL CXFA_FFListBox::IsDataChanged() {
- CFX_Int32Array iSelArray;
- m_pDataAcc->GetSelectedItems(iSelArray);
- int32_t iOldSels = iSelArray.GetSize();
- CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget;
- int32_t iSels = pListBox->CountSelItems();
- if (iOldSels == iSels) {
- int32_t iIndex = 0;
- for (; iIndex < iSels; iIndex++) {
- FWL_HLISTITEM hlistItem = pListBox->GetItem(iSelArray[iIndex]);
- if (!(pListBox->GetItemStates(hlistItem) && FWL_ITEMSTATE_LTB_Selected)) {
- break;
- }
- }
- if (iIndex == iSels) {
- return FALSE;
- }
- }
- return TRUE;
-}
-FX_DWORD CXFA_FFListBox::GetAlignment() {
- FX_DWORD dwExtendedStyle = 0;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- int32_t iHorz = para.GetHorizontalAlign();
- switch (iHorz) {
- case XFA_ATTRIBUTEENUM_Center:
- dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign;
- break;
- case XFA_ATTRIBUTEENUM_Justify:
- break;
- case XFA_ATTRIBUTEENUM_JustifyAll:
- break;
- case XFA_ATTRIBUTEENUM_Radix:
- break;
- case XFA_ATTRIBUTEENUM_Right:
- dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign;
- break;
- default:
- dwExtendedStyle |= FWL_STYLEEXT_LTB_LeftAlign;
- break;
- }
- }
- return dwExtendedStyle;
-}
-FX_BOOL CXFA_FFListBox::UpdateFWLData() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_ListBox* pListBox = ((CFWL_ListBox*)m_pNormalWidget);
- CFX_ArrayTemplate<FWL_HLISTITEM> selItemArray;
- CFX_Int32Array iSelArray;
- m_pDataAcc->GetSelectedItems(iSelArray);
- int32_t iSelCount = iSelArray.GetSize();
- for (int32_t j = 0; j < iSelCount; j++) {
- FWL_HLISTITEM lpItemSel = pListBox->GetSelItem(iSelArray[j]);
- selItemArray.Add(lpItemSel);
- }
- pListBox->SetSelItem(pListBox->GetSelItem(-1), FALSE);
- for (int32_t i = 0; i < iSelCount; i++) {
- ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(selItemArray[i], TRUE);
- }
- m_pNormalWidget->Update();
- return TRUE;
-}
-void CXFA_FFListBox::OnSelectChanged(IFWL_Widget* pWidget,
- const CFX_Int32Array& arrSels) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Change;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
- CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget;
- int32_t iSels = pListBox->CountSelItems();
- if (iSels > 0) {
- pListBox->GetItemText(pListBox->GetSelItem(0), eParam.m_wsNewText);
- }
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
-}
-void CXFA_FFListBox::SetItemState(int32_t nIndex, FX_BOOL bSelected) {
- FWL_HLISTITEM item = ((CFWL_ListBox*)m_pNormalWidget)->GetSelItem(nIndex);
- ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(item, bSelected);
- m_pNormalWidget->Update();
- AddInvalidateRect();
-}
-void CXFA_FFListBox::InsertItem(const CFX_WideStringC& wsLabel,
- int32_t nIndex) {
- CFX_WideString wsTemp(wsLabel);
- ((CFWL_ListBox*)m_pNormalWidget)->AddString(wsTemp);
- m_pNormalWidget->Update();
- AddInvalidateRect();
-}
-void CXFA_FFListBox::DeleteItem(int32_t nIndex) {
- if (nIndex < 0) {
- ((CFWL_ListBox*)m_pNormalWidget)->DeleteAll();
- } else {
- ((CFWL_ListBox*)m_pNormalWidget)
- ->DeleteString(((CFWL_ListBox*)m_pNormalWidget)->GetItem(nIndex));
- }
- m_pNormalWidget->Update();
- AddInvalidateRect();
-}
-int32_t CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) {
- return m_pOldDelegate->OnProcessMessage(pMessage);
-}
-FWL_ERR CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) {
- CXFA_FFField::OnProcessEvent(pEvent);
- FX_DWORD dwEventID = pEvent->GetClassID();
- switch (dwEventID) {
- case FWL_EVTHASH_LTB_SelChanged: {
- CFX_Int32Array arrSels;
- OnSelectChanged(m_pNormalWidget->GetWidget(), arrSels);
- break;
- }
- default: {}
- }
- return m_pOldDelegate->OnProcessEvent(pEvent);
-}
-FWL_ERR CXFA_FFListBox::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
-}
-CXFA_FFComboBox::CXFA_FFComboBox(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
-CXFA_FFComboBox::~CXFA_FFComboBox() {}
-FX_BOOL CXFA_FFComboBox::GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus) {
- if (bDrawFocus) {
- return FALSE;
- }
-#ifndef _XFA_EMB
- return CXFA_FFWidget::GetBBox(rtBox, dwStatus);
-#endif
- GetRectWithoutRotate(rtBox);
- if (m_pNormalWidget) {
- CFX_RectF rtWidget;
- ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget);
- rtBox.Union(rtWidget);
- }
- CFX_Matrix mt;
- GetRotateMatrix(mt);
- mt.TransformRect(rtBox);
- return TRUE;
-}
-FX_BOOL CXFA_FFComboBox::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFX_RectF rtWidget;
- ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget);
- if (rtWidget.Contains(fx, fy)) {
- return TRUE;
- }
- return FALSE;
-}
-FX_BOOL CXFA_FFComboBox::LoadWidget() {
- CFWL_ComboBox* pComboBox = CFWL_ComboBox::Create();
- pComboBox->Initialize();
- m_pNormalWidget = (CFWL_Widget*)pComboBox;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- CFX_WideStringArray wsLabelArray;
- m_pDataAcc->GetChoiceListItems(wsLabelArray, FALSE);
- int32_t iItems = wsLabelArray.GetSize();
- for (int32_t i = 0; i < iItems; i++) {
- pComboBox->AddString(wsLabelArray[i]);
- }
- CFX_Int32Array iSelArray;
- m_pDataAcc->GetSelectedItems(iSelArray);
- int32_t iSelCount = iSelArray.GetSize();
- if (iSelCount > 0) {
- pComboBox->SetCurSel(iSelArray[0]);
- } else {
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw);
- pComboBox->SetEditText(wsText);
- }
- UpdateWidgetProperty();
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFComboBox::UpdateWidgetProperty() {
- CFWL_ComboBox* pComboBox = (CFWL_ComboBox*)m_pNormalWidget;
- if (!pComboBox) {
- return;
- }
- FX_DWORD dwExtendedStyle = 0;
- FX_DWORD dwEditStyles =
- FWL_STYLEEXT_EDT_ReadOnly | FWL_STYLEEXT_EDT_LastLineHeight;
- dwExtendedStyle |= UpdateUIProperty();
- if (m_pDataAcc->IsChoiceListAllowTextEntry()) {
- dwEditStyles &= ~FWL_STYLEEXT_EDT_ReadOnly;
- dwExtendedStyle |= FWL_STYLEEXT_CMB_DropDown;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly;
- dwExtendedStyle |= FWL_STYLEEXT_CMB_ReadOnly;
- }
- dwExtendedStyle |= GetAlignment();
- m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
- if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
- dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll;
- }
- pComboBox->EditModifyStylesEx(dwEditStyles, 0xFFFFFFFF);
-}
-FX_BOOL CXFA_FFComboBox::OnRButtonUp(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) {
- return FALSE;
- }
- CFX_PointF pt;
- pt.Set(fx, fy);
- GetDoc()->GetDocProvider()->PopupMenu(this, pt, NULL);
- return TRUE;
-}
-FX_BOOL CXFA_FFComboBox::OnKillFocus(CXFA_FFWidget* pNewWidget) {
- FX_BOOL flag = ProcessCommittedData();
- if (!flag) {
- UpdateFWLData();
- }
- CXFA_FFField::OnKillFocus(pNewWidget);
- return TRUE;
-}
-void CXFA_FFComboBox::OpenDropDownList() {
- ((CFWL_ComboBox*)m_pNormalWidget)->OpenDropDownList(TRUE);
-}
-FX_BOOL CXFA_FFComboBox::CommitData() {
- return m_pDataAcc->SetValue(m_wsNewValue, XFA_VALUEPICTURE_Raw);
-}
-FX_BOOL CXFA_FFComboBox::IsDataChanged() {
- CFWL_ComboBox* pFWLcombobox = ((CFWL_ComboBox*)m_pNormalWidget);
- CFX_WideString wsText;
- pFWLcombobox->GetEditText(wsText);
- int32_t iCursel = pFWLcombobox->GetCurSel();
- if (iCursel >= 0) {
- CFX_WideString wsSel;
- pFWLcombobox->GetTextByIndex(iCursel, wsSel);
- if (wsSel == wsText) {
- m_pDataAcc->GetChoiceListItem(wsText, iCursel, TRUE);
- }
- }
- CFX_WideString wsOldValue;
- m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Raw);
- if (wsOldValue != wsText) {
- m_wsNewValue = wsText;
- return TRUE;
- }
- return FALSE;
-}
-void CXFA_FFComboBox::FWLEventSelChange(CXFA_EventParam* pParam) {
- pParam->m_eType = XFA_EVENT_Change;
- pParam->m_pTarget = m_pDataAcc;
- CFWL_ComboBox* pFWLcombobox = ((CFWL_ComboBox*)m_pNormalWidget);
- pFWLcombobox->GetEditText(pParam->m_wsNewText);
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, pParam);
-}
-FX_DWORD CXFA_FFComboBox::GetAlignment() {
- FX_DWORD dwExtendedStyle = 0;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- int32_t iHorz = para.GetHorizontalAlign();
- switch (iHorz) {
- case XFA_ATTRIBUTEENUM_Center:
- dwExtendedStyle |=
- FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign;
- break;
- case XFA_ATTRIBUTEENUM_Justify:
- dwExtendedStyle |= FWL_STYLEEXT_CMB_EditJustified;
- break;
- case XFA_ATTRIBUTEENUM_JustifyAll:
- break;
- case XFA_ATTRIBUTEENUM_Radix:
- break;
- case XFA_ATTRIBUTEENUM_Right:
- break;
- default:
- dwExtendedStyle |=
- FWL_STYLEEXT_CMB_EditHNear | FWL_STYLEEXT_CMB_ListItemLeftAlign;
- break;
- }
- int32_t iVert = para.GetVerticalAlign();
- switch (iVert) {
- case XFA_ATTRIBUTEENUM_Middle:
- dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter;
- break;
- case XFA_ATTRIBUTEENUM_Bottom:
- dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVFar;
- break;
- default:
- dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVNear;
- break;
- }
- }
- return dwExtendedStyle;
-}
-FX_BOOL CXFA_FFComboBox::UpdateFWLData() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFX_Int32Array iSelArray;
- m_pDataAcc->GetSelectedItems(iSelArray);
- int32_t iSelCount = iSelArray.GetSize();
- if (iSelCount > 0) {
- ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(iSelArray[0]);
- } else {
- CFX_WideString wsText;
- ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(-1);
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw);
- ((CFWL_ComboBox*)m_pNormalWidget)->SetEditText(wsText);
- }
- m_pNormalWidget->Update();
- return TRUE;
-}
-FX_BOOL CXFA_FFComboBox::CanUndo() {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditCanUndo();
-}
-FX_BOOL CXFA_FFComboBox::CanRedo() {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditCanRedo();
-}
-FX_BOOL CXFA_FFComboBox::Undo() {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditUndo();
-}
-FX_BOOL CXFA_FFComboBox::Redo() {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditRedo();
-}
-FX_BOOL CXFA_FFComboBox::CanCopy() {
- return ((CFWL_ComboBox*)m_pNormalWidget)->EditCanCopy();
-}
-FX_BOOL CXFA_FFComboBox::CanCut() {
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditCanCut();
-}
-FX_BOOL CXFA_FFComboBox::CanPaste() {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- (m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open);
-}
-FX_BOOL CXFA_FFComboBox::CanSelectAll() {
- return ((CFWL_ComboBox*)m_pNormalWidget)->EditCanSelectAll();
-}
-FX_BOOL CXFA_FFComboBox::Copy(CFX_WideString& wsCopy) {
- return ((CFWL_ComboBox*)m_pNormalWidget)->EditCopy(wsCopy);
-}
-FX_BOOL CXFA_FFComboBox::Cut(CFX_WideString& wsCut) {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditCut(wsCut);
-}
-FX_BOOL CXFA_FFComboBox::Paste(const CFX_WideString& wsPaste) {
- return m_pDataAcc->IsChoiceListAllowTextEntry() &&
- ((CFWL_ComboBox*)m_pNormalWidget)->EditPaste(wsPaste);
-}
-FX_BOOL CXFA_FFComboBox::SelectAll() {
- return ((CFWL_ComboBox*)m_pNormalWidget)->EditSelectAll();
-}
-FX_BOOL CXFA_FFComboBox::Delete() {
- return ((CFWL_ComboBox*)m_pNormalWidget)->EditDelete();
-}
-FX_BOOL CXFA_FFComboBox::DeSelect() {
- return ((CFWL_ComboBox*)m_pNormalWidget)->EditDeSelect();
-}
-void CXFA_FFComboBox::SetItemState(int32_t nIndex, FX_BOOL bSelected) {
- if (bSelected) {
- ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(nIndex);
- } else {
- ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(-1);
- }
- m_pNormalWidget->Update();
- AddInvalidateRect();
-}
-void CXFA_FFComboBox::InsertItem(const CFX_WideStringC& wsLabel,
- int32_t nIndex) {
- ((CFWL_ComboBox*)m_pNormalWidget)->AddString(wsLabel);
- m_pNormalWidget->Update();
- AddInvalidateRect();
-}
-void CXFA_FFComboBox::DeleteItem(int32_t nIndex) {
- if (nIndex < 0) {
- ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAll();
- } else {
- ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAt(nIndex);
- }
- m_pNormalWidget->Update();
- AddInvalidateRect();
-}
-void CXFA_FFComboBox::OnTextChanged(IFWL_Widget* pWidget,
- const CFX_WideString& wsChanged) {
- CXFA_EventParam eParam;
- m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
- eParam.m_wsChange = wsChanged;
- FWLEventSelChange(&eParam);
-}
-void CXFA_FFComboBox::OnSelectChanged(IFWL_Widget* pWidget,
- const CFX_Int32Array& arrSels,
- FX_BOOL bLButtonUp) {
- CXFA_EventParam eParam;
- m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
- FWLEventSelChange(&eParam);
- if (m_pDataAcc->GetChoiceListCommitOn() == XFA_ATTRIBUTEENUM_Select &&
- bLButtonUp) {
- m_pDocView->SetFocusWidgetAcc(NULL);
- }
-}
-void CXFA_FFComboBox::OnPreOpen(IFWL_Widget* pWidget) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_PreOpen;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PreOpen, &eParam);
-}
-void CXFA_FFComboBox::OnPostOpen(IFWL_Widget* pWidget) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_PostOpen;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PostOpen, &eParam);
-}
-void CXFA_FFComboBox::OnAddDoRecord(IFWL_Widget* pWidget) {
- GetDoc()->GetDocProvider()->AddDoRecord(this);
-}
-int32_t CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) {
- return m_pOldDelegate->OnProcessMessage(pMessage);
-}
-FWL_ERR CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) {
- CXFA_FFField::OnProcessEvent(pEvent);
- FX_DWORD dwEventID = pEvent->GetClassID();
- switch (dwEventID) {
- case FWL_EVTHASH_CMB_SelChanged: {
- CFWL_EvtCmbSelChanged* postEvent = (CFWL_EvtCmbSelChanged*)pEvent;
- OnSelectChanged(m_pNormalWidget->GetWidget(), postEvent->iArraySels,
- postEvent->bLButtonUp);
- break;
- }
- case FWL_EVTHASH_CMB_EditChanged: {
- CFX_WideString wsChanged;
- OnTextChanged(m_pNormalWidget->GetWidget(), wsChanged);
- break;
- }
- case FWL_EVTHASH_CMB_PreDropDown: {
- OnPreOpen(m_pNormalWidget->GetWidget());
- break;
- }
- case FWL_EVTHASH_CMB_PostDropDown: {
- OnPostOpen(m_pNormalWidget->GetWidget());
- break;
- }
- default: {}
- }
- return m_pOldDelegate->OnProcessEvent(pEvent);
-}
-FWL_ERR CXFA_FFComboBox::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffchoicelist.h"
+#include "xfa_ffdoc.h"
+CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
+CXFA_FFListBox::~CXFA_FFListBox() {
+ if (m_pNormalWidget) {
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->UnregisterEventTarget(pWidget);
+ }
+}
+FX_BOOL CXFA_FFListBox::LoadWidget() {
+ CFWL_ListBox* pListBox = CFWL_ListBox::Create();
+ pListBox->Initialize();
+ pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground,
+ 0xFFFFFFFF);
+ m_pNormalWidget = (CFWL_Widget*)pListBox;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ CFX_WideStringArray wsLabelArray;
+ m_pDataAcc->GetChoiceListItems(wsLabelArray, FALSE);
+ int32_t iItems = wsLabelArray.GetSize();
+ for (int32_t i = 0; i < iItems; i++) {
+ pListBox->AddString(wsLabelArray[i]);
+ }
+ FX_DWORD dwExtendedStyle = FWL_STYLEEXT_LTB_ShowScrollBarFocus;
+ if (m_pDataAcc->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
+ dwExtendedStyle |= FWL_STYLEEXT_LTB_MultiSelection;
+ }
+ dwExtendedStyle |= GetAlignment();
+ m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
+ CFX_Int32Array iSelArray;
+ m_pDataAcc->GetSelectedItems(iSelArray);
+ int32_t iSelCount = iSelArray.GetSize();
+ for (int32_t j = 0; j < iSelCount; j++) {
+ FWL_HLISTITEM item = pListBox->GetItem(iSelArray[j]);
+ pListBox->SetSelItem(item, TRUE);
+ }
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+FX_BOOL CXFA_FFListBox::OnKillFocus(CXFA_FFWidget* pNewFocus) {
+ FX_BOOL flag = ProcessCommittedData();
+ if (!flag) {
+ UpdateFWLData();
+ }
+ CXFA_FFField::OnKillFocus(pNewFocus);
+ return TRUE;
+}
+FX_BOOL CXFA_FFListBox::CommitData() {
+ FXSYS_assert(m_pNormalWidget != NULL);
+ CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget;
+ int32_t iSels = pListBox->CountSelItems();
+ CFX_Int32Array iSelArray;
+ for (int32_t i = 0; i < iSels; i++) {
+ iSelArray.Add(pListBox->GetSelIndex(i));
+ }
+ m_pDataAcc->SetSelectdItems(iSelArray, TRUE);
+ return TRUE;
+}
+FX_BOOL CXFA_FFListBox::IsDataChanged() {
+ CFX_Int32Array iSelArray;
+ m_pDataAcc->GetSelectedItems(iSelArray);
+ int32_t iOldSels = iSelArray.GetSize();
+ CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget;
+ int32_t iSels = pListBox->CountSelItems();
+ if (iOldSels == iSels) {
+ int32_t iIndex = 0;
+ for (; iIndex < iSels; iIndex++) {
+ FWL_HLISTITEM hlistItem = pListBox->GetItem(iSelArray[iIndex]);
+ if (!(pListBox->GetItemStates(hlistItem) && FWL_ITEMSTATE_LTB_Selected)) {
+ break;
+ }
+ }
+ if (iIndex == iSels) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+FX_DWORD CXFA_FFListBox::GetAlignment() {
+ FX_DWORD dwExtendedStyle = 0;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ int32_t iHorz = para.GetHorizontalAlign();
+ switch (iHorz) {
+ case XFA_ATTRIBUTEENUM_Center:
+ dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign;
+ break;
+ case XFA_ATTRIBUTEENUM_Justify:
+ break;
+ case XFA_ATTRIBUTEENUM_JustifyAll:
+ break;
+ case XFA_ATTRIBUTEENUM_Radix:
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign;
+ break;
+ default:
+ dwExtendedStyle |= FWL_STYLEEXT_LTB_LeftAlign;
+ break;
+ }
+ }
+ return dwExtendedStyle;
+}
+FX_BOOL CXFA_FFListBox::UpdateFWLData() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_ListBox* pListBox = ((CFWL_ListBox*)m_pNormalWidget);
+ CFX_ArrayTemplate<FWL_HLISTITEM> selItemArray;
+ CFX_Int32Array iSelArray;
+ m_pDataAcc->GetSelectedItems(iSelArray);
+ int32_t iSelCount = iSelArray.GetSize();
+ for (int32_t j = 0; j < iSelCount; j++) {
+ FWL_HLISTITEM lpItemSel = pListBox->GetSelItem(iSelArray[j]);
+ selItemArray.Add(lpItemSel);
+ }
+ pListBox->SetSelItem(pListBox->GetSelItem(-1), FALSE);
+ for (int32_t i = 0; i < iSelCount; i++) {
+ ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(selItemArray[i], TRUE);
+ }
+ m_pNormalWidget->Update();
+ return TRUE;
+}
+void CXFA_FFListBox::OnSelectChanged(IFWL_Widget* pWidget,
+ const CFX_Int32Array& arrSels) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Change;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
+ CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget;
+ int32_t iSels = pListBox->CountSelItems();
+ if (iSels > 0) {
+ pListBox->GetItemText(pListBox->GetSelItem(0), eParam.m_wsNewText);
+ }
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
+}
+void CXFA_FFListBox::SetItemState(int32_t nIndex, FX_BOOL bSelected) {
+ FWL_HLISTITEM item = ((CFWL_ListBox*)m_pNormalWidget)->GetSelItem(nIndex);
+ ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(item, bSelected);
+ m_pNormalWidget->Update();
+ AddInvalidateRect();
+}
+void CXFA_FFListBox::InsertItem(const CFX_WideStringC& wsLabel,
+ int32_t nIndex) {
+ CFX_WideString wsTemp(wsLabel);
+ ((CFWL_ListBox*)m_pNormalWidget)->AddString(wsTemp);
+ m_pNormalWidget->Update();
+ AddInvalidateRect();
+}
+void CXFA_FFListBox::DeleteItem(int32_t nIndex) {
+ if (nIndex < 0) {
+ ((CFWL_ListBox*)m_pNormalWidget)->DeleteAll();
+ } else {
+ ((CFWL_ListBox*)m_pNormalWidget)
+ ->DeleteString(((CFWL_ListBox*)m_pNormalWidget)->GetItem(nIndex));
+ }
+ m_pNormalWidget->Update();
+ AddInvalidateRect();
+}
+int32_t CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) {
+ return m_pOldDelegate->OnProcessMessage(pMessage);
+}
+FWL_ERR CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) {
+ CXFA_FFField::OnProcessEvent(pEvent);
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ switch (dwEventID) {
+ case FWL_EVTHASH_LTB_SelChanged: {
+ CFX_Int32Array arrSels;
+ OnSelectChanged(m_pNormalWidget->GetWidget(), arrSels);
+ break;
+ }
+ default: {}
+ }
+ return m_pOldDelegate->OnProcessEvent(pEvent);
+}
+FWL_ERR CXFA_FFListBox::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
+}
+CXFA_FFComboBox::CXFA_FFComboBox(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
+CXFA_FFComboBox::~CXFA_FFComboBox() {}
+FX_BOOL CXFA_FFComboBox::GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus) {
+ if (bDrawFocus) {
+ return FALSE;
+ }
+#ifndef _XFA_EMB
+ return CXFA_FFWidget::GetBBox(rtBox, dwStatus);
+#endif
+ GetRectWithoutRotate(rtBox);
+ if (m_pNormalWidget) {
+ CFX_RectF rtWidget;
+ ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget);
+ rtBox.Union(rtWidget);
+ }
+ CFX_Matrix mt;
+ GetRotateMatrix(mt);
+ mt.TransformRect(rtBox);
+ return TRUE;
+}
+FX_BOOL CXFA_FFComboBox::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFX_RectF rtWidget;
+ ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget);
+ if (rtWidget.Contains(fx, fy)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_FFComboBox::LoadWidget() {
+ CFWL_ComboBox* pComboBox = CFWL_ComboBox::Create();
+ pComboBox->Initialize();
+ m_pNormalWidget = (CFWL_Widget*)pComboBox;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ CFX_WideStringArray wsLabelArray;
+ m_pDataAcc->GetChoiceListItems(wsLabelArray, FALSE);
+ int32_t iItems = wsLabelArray.GetSize();
+ for (int32_t i = 0; i < iItems; i++) {
+ pComboBox->AddString(wsLabelArray[i]);
+ }
+ CFX_Int32Array iSelArray;
+ m_pDataAcc->GetSelectedItems(iSelArray);
+ int32_t iSelCount = iSelArray.GetSize();
+ if (iSelCount > 0) {
+ pComboBox->SetCurSel(iSelArray[0]);
+ } else {
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw);
+ pComboBox->SetEditText(wsText);
+ }
+ UpdateWidgetProperty();
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFComboBox::UpdateWidgetProperty() {
+ CFWL_ComboBox* pComboBox = (CFWL_ComboBox*)m_pNormalWidget;
+ if (!pComboBox) {
+ return;
+ }
+ FX_DWORD dwExtendedStyle = 0;
+ FX_DWORD dwEditStyles =
+ FWL_STYLEEXT_EDT_ReadOnly | FWL_STYLEEXT_EDT_LastLineHeight;
+ dwExtendedStyle |= UpdateUIProperty();
+ if (m_pDataAcc->IsChoiceListAllowTextEntry()) {
+ dwEditStyles &= ~FWL_STYLEEXT_EDT_ReadOnly;
+ dwExtendedStyle |= FWL_STYLEEXT_CMB_DropDown;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly;
+ dwExtendedStyle |= FWL_STYLEEXT_CMB_ReadOnly;
+ }
+ dwExtendedStyle |= GetAlignment();
+ m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
+ if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
+ dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll;
+ }
+ pComboBox->EditModifyStylesEx(dwEditStyles, 0xFFFFFFFF);
+}
+FX_BOOL CXFA_FFComboBox::OnRButtonUp(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) {
+ return FALSE;
+ }
+ CFX_PointF pt;
+ pt.Set(fx, fy);
+ GetDoc()->GetDocProvider()->PopupMenu(this, pt, NULL);
+ return TRUE;
+}
+FX_BOOL CXFA_FFComboBox::OnKillFocus(CXFA_FFWidget* pNewWidget) {
+ FX_BOOL flag = ProcessCommittedData();
+ if (!flag) {
+ UpdateFWLData();
+ }
+ CXFA_FFField::OnKillFocus(pNewWidget);
+ return TRUE;
+}
+void CXFA_FFComboBox::OpenDropDownList() {
+ ((CFWL_ComboBox*)m_pNormalWidget)->OpenDropDownList(TRUE);
+}
+FX_BOOL CXFA_FFComboBox::CommitData() {
+ return m_pDataAcc->SetValue(m_wsNewValue, XFA_VALUEPICTURE_Raw);
+}
+FX_BOOL CXFA_FFComboBox::IsDataChanged() {
+ CFWL_ComboBox* pFWLcombobox = ((CFWL_ComboBox*)m_pNormalWidget);
+ CFX_WideString wsText;
+ pFWLcombobox->GetEditText(wsText);
+ int32_t iCursel = pFWLcombobox->GetCurSel();
+ if (iCursel >= 0) {
+ CFX_WideString wsSel;
+ pFWLcombobox->GetTextByIndex(iCursel, wsSel);
+ if (wsSel == wsText) {
+ m_pDataAcc->GetChoiceListItem(wsText, iCursel, TRUE);
+ }
+ }
+ CFX_WideString wsOldValue;
+ m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Raw);
+ if (wsOldValue != wsText) {
+ m_wsNewValue = wsText;
+ return TRUE;
+ }
+ return FALSE;
+}
+void CXFA_FFComboBox::FWLEventSelChange(CXFA_EventParam* pParam) {
+ pParam->m_eType = XFA_EVENT_Change;
+ pParam->m_pTarget = m_pDataAcc;
+ CFWL_ComboBox* pFWLcombobox = ((CFWL_ComboBox*)m_pNormalWidget);
+ pFWLcombobox->GetEditText(pParam->m_wsNewText);
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, pParam);
+}
+FX_DWORD CXFA_FFComboBox::GetAlignment() {
+ FX_DWORD dwExtendedStyle = 0;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ int32_t iHorz = para.GetHorizontalAlign();
+ switch (iHorz) {
+ case XFA_ATTRIBUTEENUM_Center:
+ dwExtendedStyle |=
+ FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign;
+ break;
+ case XFA_ATTRIBUTEENUM_Justify:
+ dwExtendedStyle |= FWL_STYLEEXT_CMB_EditJustified;
+ break;
+ case XFA_ATTRIBUTEENUM_JustifyAll:
+ break;
+ case XFA_ATTRIBUTEENUM_Radix:
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ break;
+ default:
+ dwExtendedStyle |=
+ FWL_STYLEEXT_CMB_EditHNear | FWL_STYLEEXT_CMB_ListItemLeftAlign;
+ break;
+ }
+ int32_t iVert = para.GetVerticalAlign();
+ switch (iVert) {
+ case XFA_ATTRIBUTEENUM_Middle:
+ dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter;
+ break;
+ case XFA_ATTRIBUTEENUM_Bottom:
+ dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVFar;
+ break;
+ default:
+ dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVNear;
+ break;
+ }
+ }
+ return dwExtendedStyle;
+}
+FX_BOOL CXFA_FFComboBox::UpdateFWLData() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFX_Int32Array iSelArray;
+ m_pDataAcc->GetSelectedItems(iSelArray);
+ int32_t iSelCount = iSelArray.GetSize();
+ if (iSelCount > 0) {
+ ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(iSelArray[0]);
+ } else {
+ CFX_WideString wsText;
+ ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(-1);
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw);
+ ((CFWL_ComboBox*)m_pNormalWidget)->SetEditText(wsText);
+ }
+ m_pNormalWidget->Update();
+ return TRUE;
+}
+FX_BOOL CXFA_FFComboBox::CanUndo() {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditCanUndo();
+}
+FX_BOOL CXFA_FFComboBox::CanRedo() {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditCanRedo();
+}
+FX_BOOL CXFA_FFComboBox::Undo() {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditUndo();
+}
+FX_BOOL CXFA_FFComboBox::Redo() {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditRedo();
+}
+FX_BOOL CXFA_FFComboBox::CanCopy() {
+ return ((CFWL_ComboBox*)m_pNormalWidget)->EditCanCopy();
+}
+FX_BOOL CXFA_FFComboBox::CanCut() {
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditCanCut();
+}
+FX_BOOL CXFA_FFComboBox::CanPaste() {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ (m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open);
+}
+FX_BOOL CXFA_FFComboBox::CanSelectAll() {
+ return ((CFWL_ComboBox*)m_pNormalWidget)->EditCanSelectAll();
+}
+FX_BOOL CXFA_FFComboBox::Copy(CFX_WideString& wsCopy) {
+ return ((CFWL_ComboBox*)m_pNormalWidget)->EditCopy(wsCopy);
+}
+FX_BOOL CXFA_FFComboBox::Cut(CFX_WideString& wsCut) {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditCut(wsCut);
+}
+FX_BOOL CXFA_FFComboBox::Paste(const CFX_WideString& wsPaste) {
+ return m_pDataAcc->IsChoiceListAllowTextEntry() &&
+ ((CFWL_ComboBox*)m_pNormalWidget)->EditPaste(wsPaste);
+}
+FX_BOOL CXFA_FFComboBox::SelectAll() {
+ return ((CFWL_ComboBox*)m_pNormalWidget)->EditSelectAll();
+}
+FX_BOOL CXFA_FFComboBox::Delete() {
+ return ((CFWL_ComboBox*)m_pNormalWidget)->EditDelete();
+}
+FX_BOOL CXFA_FFComboBox::DeSelect() {
+ return ((CFWL_ComboBox*)m_pNormalWidget)->EditDeSelect();
+}
+void CXFA_FFComboBox::SetItemState(int32_t nIndex, FX_BOOL bSelected) {
+ if (bSelected) {
+ ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(nIndex);
+ } else {
+ ((CFWL_ComboBox*)m_pNormalWidget)->SetCurSel(-1);
+ }
+ m_pNormalWidget->Update();
+ AddInvalidateRect();
+}
+void CXFA_FFComboBox::InsertItem(const CFX_WideStringC& wsLabel,
+ int32_t nIndex) {
+ ((CFWL_ComboBox*)m_pNormalWidget)->AddString(wsLabel);
+ m_pNormalWidget->Update();
+ AddInvalidateRect();
+}
+void CXFA_FFComboBox::DeleteItem(int32_t nIndex) {
+ if (nIndex < 0) {
+ ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAll();
+ } else {
+ ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAt(nIndex);
+ }
+ m_pNormalWidget->Update();
+ AddInvalidateRect();
+}
+void CXFA_FFComboBox::OnTextChanged(IFWL_Widget* pWidget,
+ const CFX_WideString& wsChanged) {
+ CXFA_EventParam eParam;
+ m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
+ eParam.m_wsChange = wsChanged;
+ FWLEventSelChange(&eParam);
+}
+void CXFA_FFComboBox::OnSelectChanged(IFWL_Widget* pWidget,
+ const CFX_Int32Array& arrSels,
+ FX_BOOL bLButtonUp) {
+ CXFA_EventParam eParam;
+ m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
+ FWLEventSelChange(&eParam);
+ if (m_pDataAcc->GetChoiceListCommitOn() == XFA_ATTRIBUTEENUM_Select &&
+ bLButtonUp) {
+ m_pDocView->SetFocusWidgetAcc(NULL);
+ }
+}
+void CXFA_FFComboBox::OnPreOpen(IFWL_Widget* pWidget) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_PreOpen;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PreOpen, &eParam);
+}
+void CXFA_FFComboBox::OnPostOpen(IFWL_Widget* pWidget) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_PostOpen;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PostOpen, &eParam);
+}
+void CXFA_FFComboBox::OnAddDoRecord(IFWL_Widget* pWidget) {
+ GetDoc()->GetDocProvider()->AddDoRecord(this);
+}
+int32_t CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) {
+ return m_pOldDelegate->OnProcessMessage(pMessage);
+}
+FWL_ERR CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) {
+ CXFA_FFField::OnProcessEvent(pEvent);
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ switch (dwEventID) {
+ case FWL_EVTHASH_CMB_SelChanged: {
+ CFWL_EvtCmbSelChanged* postEvent = (CFWL_EvtCmbSelChanged*)pEvent;
+ OnSelectChanged(m_pNormalWidget->GetWidget(), postEvent->iArraySels,
+ postEvent->bLButtonUp);
+ break;
+ }
+ case FWL_EVTHASH_CMB_EditChanged: {
+ CFX_WideString wsChanged;
+ OnTextChanged(m_pNormalWidget->GetWidget(), wsChanged);
+ break;
+ }
+ case FWL_EVTHASH_CMB_PreDropDown: {
+ OnPreOpen(m_pNormalWidget->GetWidget());
+ break;
+ }
+ case FWL_EVTHASH_CMB_PostDropDown: {
+ OnPostOpen(m_pNormalWidget->GetWidget());
+ break;
+ }
+ default: {}
+ }
+ return m_pOldDelegate->OnProcessEvent(pEvent);
+}
+FWL_ERR CXFA_FFComboBox::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffchoicelist.h b/xfa/src/fxfa/src/app/xfa_ffchoicelist.h
index 71dc783b78..0093240ebb 100644
--- a/xfa/src/fxfa/src/app/xfa_ffchoicelist.h
+++ b/xfa/src/fxfa/src/app/xfa_ffchoicelist.h
@@ -1,92 +1,92 @@
-// 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 _FXFA_FORMFILLER_CHOICELIST_IMP_H
-#define _FXFA_FORMFILLER_CHOICELIST_IMP_H
-class CXFA_FFListBox : public CXFA_FFField {
- public:
- CXFA_FFListBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFListBox();
- virtual FX_BOOL LoadWidget();
- virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
-
- protected:
- virtual FX_BOOL CommitData();
- virtual FX_BOOL UpdateFWLData();
- virtual FX_BOOL IsDataChanged();
- FX_DWORD GetAlignment();
-
- public:
- void OnSelectChanged(IFWL_Widget* pWidget, const CFX_Int32Array& arrSels);
- void SetItemState(int32_t nIndex, FX_BOOL bSelected);
- void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex = -1);
- void DeleteItem(int32_t nIndex);
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-
- protected:
- IFWL_WidgetDelegate* m_pOldDelegate;
-};
-class CXFA_FFComboBox : public CXFA_FFField {
- public:
- CXFA_FFComboBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFComboBox();
- virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus = FALSE);
- virtual FX_BOOL LoadWidget();
- virtual void UpdateWidgetProperty();
- virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
- virtual FX_BOOL CanUndo();
- virtual FX_BOOL CanRedo();
- virtual FX_BOOL Undo();
- virtual FX_BOOL Redo();
-
- virtual FX_BOOL CanCopy();
- virtual FX_BOOL CanCut();
- virtual FX_BOOL CanPaste();
- virtual FX_BOOL CanSelectAll();
- virtual FX_BOOL Copy(CFX_WideString& wsCopy);
- virtual FX_BOOL Cut(CFX_WideString& wsCut);
- virtual FX_BOOL Paste(const CFX_WideString& wsPaste);
- virtual FX_BOOL SelectAll();
- virtual FX_BOOL Delete();
- virtual FX_BOOL DeSelect();
- void OpenDropDownList();
-
- protected:
- virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL CommitData();
- virtual FX_BOOL UpdateFWLData();
- virtual FX_BOOL IsDataChanged();
- FX_DWORD GetAlignment();
- void FWLEventSelChange(CXFA_EventParam* pParam);
-
- CFX_WideString m_wsNewValue;
-
- public:
- void OnTextChanged(IFWL_Widget* pWidget, const CFX_WideString& wsChanged);
- void OnSelectChanged(IFWL_Widget* pWidget,
- const CFX_Int32Array& arrSels,
- FX_BOOL bLButtonUp);
- void OnPreOpen(IFWL_Widget* pWidget);
- void OnPostOpen(IFWL_Widget* pWidget);
- void OnAddDoRecord(IFWL_Widget* pWidget);
- void SetItemState(int32_t nIndex, FX_BOOL bSelected);
- void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex = -1);
- void DeleteItem(int32_t nIndex);
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-
- protected:
- IFWL_WidgetDelegate* m_pOldDelegate;
-};
-#endif
+// 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 _FXFA_FORMFILLER_CHOICELIST_IMP_H
+#define _FXFA_FORMFILLER_CHOICELIST_IMP_H
+class CXFA_FFListBox : public CXFA_FFField {
+ public:
+ CXFA_FFListBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFListBox();
+ virtual FX_BOOL LoadWidget();
+ virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
+
+ protected:
+ virtual FX_BOOL CommitData();
+ virtual FX_BOOL UpdateFWLData();
+ virtual FX_BOOL IsDataChanged();
+ FX_DWORD GetAlignment();
+
+ public:
+ void OnSelectChanged(IFWL_Widget* pWidget, const CFX_Int32Array& arrSels);
+ void SetItemState(int32_t nIndex, FX_BOOL bSelected);
+ void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex = -1);
+ void DeleteItem(int32_t nIndex);
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+ IFWL_WidgetDelegate* m_pOldDelegate;
+};
+class CXFA_FFComboBox : public CXFA_FFField {
+ public:
+ CXFA_FFComboBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFComboBox();
+ virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus = FALSE);
+ virtual FX_BOOL LoadWidget();
+ virtual void UpdateWidgetProperty();
+ virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
+ virtual FX_BOOL CanUndo();
+ virtual FX_BOOL CanRedo();
+ virtual FX_BOOL Undo();
+ virtual FX_BOOL Redo();
+
+ virtual FX_BOOL CanCopy();
+ virtual FX_BOOL CanCut();
+ virtual FX_BOOL CanPaste();
+ virtual FX_BOOL CanSelectAll();
+ virtual FX_BOOL Copy(CFX_WideString& wsCopy);
+ virtual FX_BOOL Cut(CFX_WideString& wsCut);
+ virtual FX_BOOL Paste(const CFX_WideString& wsPaste);
+ virtual FX_BOOL SelectAll();
+ virtual FX_BOOL Delete();
+ virtual FX_BOOL DeSelect();
+ void OpenDropDownList();
+
+ protected:
+ virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL CommitData();
+ virtual FX_BOOL UpdateFWLData();
+ virtual FX_BOOL IsDataChanged();
+ FX_DWORD GetAlignment();
+ void FWLEventSelChange(CXFA_EventParam* pParam);
+
+ CFX_WideString m_wsNewValue;
+
+ public:
+ void OnTextChanged(IFWL_Widget* pWidget, const CFX_WideString& wsChanged);
+ void OnSelectChanged(IFWL_Widget* pWidget,
+ const CFX_Int32Array& arrSels,
+ FX_BOOL bLButtonUp);
+ void OnPreOpen(IFWL_Widget* pWidget);
+ void OnPostOpen(IFWL_Widget* pWidget);
+ void OnAddDoRecord(IFWL_Widget* pWidget);
+ void SetItemState(int32_t nIndex, FX_BOOL bSelected);
+ void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex = -1);
+ void DeleteItem(int32_t nIndex);
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+ IFWL_WidgetDelegate* m_pOldDelegate;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffdoc.cpp b/xfa/src/fxfa/src/app/xfa_ffdoc.cpp
index 1af7171529..9e232f1017 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdoc.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffdoc.cpp
@@ -1,448 +1,448 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffnotify.h"
-#include "xfa_fontmgr.h"
-CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider)
- : m_pDocProvider(pDocProvider),
- m_pDocument(nullptr),
- m_pStream(nullptr),
- m_pApp(pApp),
- m_pNotify(nullptr),
- m_pPDFDoc(nullptr),
- m_dwDocType(XFA_DOCTYPE_Static),
- m_bOwnStream(TRUE) {
-}
-CXFA_FFDoc::~CXFA_FFDoc() {
- CloseDoc();
-}
-FX_DWORD CXFA_FFDoc::GetDocType() {
- return m_dwDocType;
-}
-int32_t CXFA_FFDoc::StartLoad() {
- m_pNotify = new CXFA_FFNotify(this);
- IXFA_DocParser* pDocParser = IXFA_DocParser::Create(m_pNotify);
- int32_t iStatus = pDocParser->StartParse(m_pStream);
- m_pDocument = pDocParser->GetDocument();
- return iStatus;
-}
-FX_BOOL XFA_GetPDFContentsFromPDFXML(IFDE_XMLNode* pPDFElement,
- uint8_t*& pByteBuffer,
- int32_t& iBufferSize) {
- IFDE_XMLElement* pDocumentElement = NULL;
- for (IFDE_XMLNode* pXMLNode =
- pPDFElement->GetNodeItem(IFDE_XMLNode::FirstChild);
- pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
- CFX_WideString wsTagName;
- IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode;
- pXMLElement->GetTagName(wsTagName);
- if (wsTagName.Equal(FX_WSTRC(L"document"))) {
- pDocumentElement = pXMLElement;
- break;
- }
- }
- }
- if (!pDocumentElement) {
- return FALSE;
- }
- IFDE_XMLElement* pChunkElement = NULL;
- for (IFDE_XMLNode* pXMLNode =
- pDocumentElement->GetNodeItem(IFDE_XMLNode::FirstChild);
- pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
- CFX_WideString wsTagName;
- IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode;
- pXMLElement->GetTagName(wsTagName);
- if (wsTagName.Equal(FX_WSTRC(L"chunk"))) {
- pChunkElement = pXMLElement;
- break;
- }
- }
- }
- if (!pChunkElement) {
- return FALSE;
- }
- CFX_WideString wsPDFContent;
- pChunkElement->GetTextData(wsPDFContent);
- iBufferSize = FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), NULL);
- pByteBuffer = FX_Alloc(uint8_t, iBufferSize + 1);
- pByteBuffer[iBufferSize] = '0'; // FIXME: I bet this is wrong.
- FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), pByteBuffer);
- return TRUE;
-}
-void XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) {
- CXFA_Node* pChildNode = pNewRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
- while (pChildNode) {
- CXFA_Node* pOriginChild =
- pOriginRoot->GetFirstChildByName(pChildNode->GetNameHash());
- if (pOriginChild) {
- pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling);
- } else {
- CXFA_Node* pNextSibling =
- pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling);
- pNewRoot->RemoveChild(pChildNode);
- pOriginRoot->InsertChild(pChildNode);
- pChildNode = pNextSibling;
- pNextSibling = NULL;
- }
- }
-}
-int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) {
- int32_t iStatus = m_pDocument->GetParser()->DoParse(pPause);
- if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) {
- CXFA_Node* pPDFNode = (CXFA_Node*)m_pDocument->GetXFANode(XFA_HASHCODE_Pdf);
- if (!pPDFNode) {
- return XFA_PARSESTATUS_SyntaxErr;
- }
- IFDE_XMLNode* pPDFXML = pPDFNode->GetXMLMappingNode();
- if (pPDFXML->GetType() != FDE_XMLNODE_Element) {
- return XFA_PARSESTATUS_SyntaxErr;
- }
- int32_t iBufferSize = 0;
- uint8_t* pByteBuffer = NULL;
- IFX_FileRead* pXFAReader = NULL;
- if (XFA_GetPDFContentsFromPDFXML(pPDFXML, pByteBuffer, iBufferSize)) {
- pXFAReader = FX_CreateMemoryStream(pByteBuffer, iBufferSize, TRUE);
- if (!pXFAReader) {
- if (pByteBuffer) {
- FX_Free(pByteBuffer);
- pByteBuffer = NULL;
- }
- return XFA_PARSESTATUS_SyntaxErr;
- }
- } else {
- CFX_WideString wsHref;
- ((IFDE_XMLElement*)pPDFXML)->GetString(L"href", wsHref);
- if (!wsHref.IsEmpty()) {
- pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref);
- }
- }
- if (!pXFAReader) {
- return XFA_PARSESTATUS_SyntaxErr;
- }
- CPDF_Document* pPDFDocument =
- GetDocProvider()->OpenPDF(this, pXFAReader, TRUE);
- FXSYS_assert(!m_pPDFDoc);
- if (!OpenDoc(pPDFDocument)) {
- return XFA_PARSESTATUS_SyntaxErr;
- }
- IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument, TRUE);
- if (!pParser) {
- return XFA_PARSESTATUS_SyntaxErr;
- }
- CXFA_Node* pRootNode = NULL;
- if (pParser->StartParse(m_pStream) == XFA_PARSESTATUS_Ready &&
- pParser->DoParse(NULL) == XFA_PARSESTATUS_Done) {
- pRootNode = pParser->GetRootNode();
- }
- if (pRootNode && m_pDocument->GetRoot()) {
- XFA_XPDPacket_MergeRootNode(m_pDocument->GetRoot(), pRootNode);
- iStatus = XFA_PARSESTATUS_Done;
- } else {
- iStatus = XFA_PARSESTATUS_StatusErr;
- }
- pParser->Release();
- pParser = NULL;
- }
- return iStatus;
-}
-void CXFA_FFDoc::StopLoad() {
- m_pApp->GetXFAFontMgr()->LoadDocFonts(this);
- m_dwDocType = XFA_DOCTYPE_Static;
- CXFA_Node* pConfig = (CXFA_Node*)m_pDocument->GetXFANode(XFA_HASHCODE_Config);
- if (!pConfig) {
- return;
- }
- CXFA_Node* pAcrobat = pConfig->GetFirstChildByClass(XFA_ELEMENT_Acrobat);
- if (!pAcrobat) {
- return;
- }
- CXFA_Node* pAcrobat7 = pAcrobat->GetFirstChildByClass(XFA_ELEMENT_Acrobat7);
- if (!pAcrobat7) {
- return;
- }
- CXFA_Node* pDynamicRender =
- pAcrobat7->GetFirstChildByClass(XFA_ELEMENT_DynamicRender);
- if (!pDynamicRender) {
- return;
- }
- CFX_WideString wsType;
- if (pDynamicRender->TryContent(wsType) && wsType == FX_WSTRC(L"required")) {
- m_dwDocType = XFA_DOCTYPE_Dynamic;
- }
-}
-IXFA_DocView* CXFA_FFDoc::CreateDocView(FX_DWORD dwView) {
- CXFA_FFDocView* pDocView =
- (CXFA_FFDocView*)m_mapTypeToDocView.GetValueAt((void*)(uintptr_t)dwView);
- if (!pDocView) {
- pDocView = new CXFA_FFDocView(this);
- m_mapTypeToDocView.SetAt((void*)(uintptr_t)dwView, pDocView);
- }
- return pDocView;
-}
-CXFA_FFDocView* CXFA_FFDoc::GetDocView(IXFA_DocLayout* pLayout) {
- FX_POSITION ps = m_mapTypeToDocView.GetStartPosition();
- while (ps) {
- void* pType;
- CXFA_FFDocView* pDocView;
- m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView);
- if (pDocView->GetXFALayout() == pLayout) {
- return pDocView;
- }
- }
- return NULL;
-}
-CXFA_FFDocView* CXFA_FFDoc::GetDocView() {
- FX_POSITION ps = m_mapTypeToDocView.GetStartPosition();
- if (ps) {
- void* pType;
- CXFA_FFDocView* pDocView;
- m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView);
- return pDocView;
- }
- return NULL;
-}
-FX_BOOL CXFA_FFDoc::OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile) {
- m_bOwnStream = bTakeOverFile;
- m_pStream = pStream;
- return TRUE;
-}
-FX_BOOL CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) {
- if (pPDFDoc == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pRoot = pPDFDoc->GetRoot();
- if (pRoot == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
- if (pAcroForm == NULL) {
- return FALSE;
- }
- CPDF_Object* pElementXFA = pAcroForm->GetElementValue("XFA");
- if (pElementXFA == NULL) {
- return FALSE;
- }
- CFX_ArrayTemplate<CPDF_Stream*> xfaStreams;
- if (pElementXFA->IsArray()) {
- CPDF_Array* pXFAArray = (CPDF_Array*)pElementXFA;
- FX_DWORD count = pXFAArray->GetCount() / 2;
- for (FX_DWORD i = 0; i < count; i++) {
- CPDF_Stream* pStream = pXFAArray->GetStream(i * 2 + 1);
- if (pStream != NULL) {
- xfaStreams.Add(pStream);
- }
- }
- } else if (pElementXFA->IsStream()) {
- xfaStreams.Add((CPDF_Stream*)pElementXFA);
- }
- if (xfaStreams.GetSize() < 1) {
- return FALSE;
- }
- IFX_FileRead* pFileRead = new CXFA_FileRead(xfaStreams);
- m_pPDFDoc = pPDFDoc;
- if (m_pStream) {
- m_pStream->Release();
- m_pStream = NULL;
- }
- m_pStream = pFileRead;
- m_bOwnStream = TRUE;
- return TRUE;
-}
-FX_BOOL CXFA_FFDoc::CloseDoc() {
- FX_POSITION psClose = m_mapTypeToDocView.GetStartPosition();
- while (psClose) {
- void* pType;
- CXFA_FFDocView* pDocView;
- m_mapTypeToDocView.GetNextAssoc(psClose, pType, (void*&)pDocView);
- pDocView->RunDocClose();
- }
- if (m_pDocument) {
- m_pDocument->ClearLayoutData();
- }
- FX_POSITION ps = m_mapTypeToDocView.GetStartPosition();
- while (ps) {
- void* pType;
- CXFA_FFDocView* pDocView;
- m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView);
- delete pDocView;
- }
- m_mapTypeToDocView.RemoveAll();
- if (m_pDocument) {
- IXFA_Parser* pParser = m_pDocument->GetParser();
- pParser->Release();
- m_pDocument = NULL;
- }
- if (m_pNotify) {
- delete m_pNotify;
- m_pNotify = NULL;
- }
- m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this);
- if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) {
- m_pStream->Release();
- m_pStream = NULL;
- }
- ps = m_mapNamedImages.GetStartPosition();
- while (ps) {
- void* pName;
- FX_IMAGEDIB_AND_DPI* pImage = NULL;
- m_mapNamedImages.GetNextAssoc(ps, pName, (void*&)pImage);
- if (pImage) {
- delete pImage->pDibSource;
- pImage->pDibSource = NULL;
- FX_Free(pImage);
- pImage = NULL;
- }
- }
- m_mapNamedImages.RemoveAll();
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->ClearEventTargets(FALSE);
- return TRUE;
-}
-void CXFA_FFDoc::SetDocType(FX_DWORD dwType) {
- m_dwDocType = dwType;
-}
-CPDF_Document* CXFA_FFDoc::GetPDFDoc() {
- return m_pPDFDoc;
-}
-#define _FXLIB_NEW_VERSION_
-CFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName,
- int32_t& iImageXDpi,
- int32_t& iImageYDpi) {
- if (!m_pPDFDoc) {
- return NULL;
- }
- FX_DWORD dwHash =
- FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength(), FALSE);
- FX_IMAGEDIB_AND_DPI* imageDIBDpi = NULL;
- if (m_mapNamedImages.Lookup((void*)(uintptr_t)dwHash, (void*&)imageDIBDpi)) {
- iImageXDpi = imageDIBDpi->iImageXDpi;
- iImageYDpi = imageDIBDpi->iImageYDpi;
- return (CFX_DIBitmap*)imageDIBDpi->pDibSource;
- }
- CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
- if (pRoot == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pNames = pRoot->GetDict("Names");
- if (!pNames) {
- return NULL;
- }
- CPDF_Dictionary* pXFAImages = pNames->GetDict("XFAImages");
- if (!pXFAImages) {
- return NULL;
- }
- CPDF_NameTree nametree(pXFAImages);
-#ifdef _FXLIB_NEW_VERSION_
- CFX_ByteString bsName = PDF_EncodeText(wsName.GetPtr(), wsName.GetLength());
- CPDF_Object* pObject = nametree.LookupValue(bsName);
- if (!pObject) {
- int32_t iCount = nametree.GetCount();
- for (int32_t i = 0; i < iCount; i++) {
- CFX_ByteString bsTemp;
- CPDF_Object* pTempObject = nametree.LookupValue(i, bsTemp);
- if (bsTemp == bsName) {
- pObject = pTempObject;
- break;
- }
- }
- }
-#else
- CPDF_Object* pObject = nametree.LookupValue(wsName);
- if (!pObject) {
- int32_t iCount = nametree.GetCount();
- for (int32_t i = 0; i < iCount; i++) {
- CFX_WideString wsTemp;
- CPDF_Object* pTempObject = nametree.LookupValue(i, wsTemp);
- if (wsTemp == wsName) {
- pObject = pTempObject;
- break;
- }
- }
- }
-#endif
- if (!pObject || !pObject->IsStream()) {
- return NULL;
- }
- if (!imageDIBDpi) {
- imageDIBDpi = FX_Alloc(FX_IMAGEDIB_AND_DPI, 1);
- imageDIBDpi->pDibSource = NULL;
- imageDIBDpi->iImageXDpi = 0;
- imageDIBDpi->iImageYDpi = 0;
- CPDF_StreamAcc streamAcc;
- streamAcc.LoadAllData((CPDF_Stream*)pObject);
- IFX_FileRead* pImageFileRead = FX_CreateMemoryStream(
- (uint8_t*)streamAcc.GetData(), streamAcc.GetSize());
- imageDIBDpi->pDibSource = XFA_LoadImageFromBuffer(
- pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi);
- imageDIBDpi->iImageXDpi = iImageXDpi;
- imageDIBDpi->iImageYDpi = iImageYDpi;
- pImageFileRead->Release();
- }
- m_mapNamedImages.SetAt((void*)(uintptr_t)dwHash, imageDIBDpi);
- return (CFX_DIBitmap*)imageDIBDpi->pDibSource;
-}
-IFDE_XMLElement* CXFA_FFDoc::GetPackageData(const CFX_WideStringC& wsPackage) {
- FX_DWORD packetHash =
- FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength());
- CXFA_Object* pObject = m_pDocument->GetXFANode(packetHash);
- CXFA_Node* pNode =
- (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL;
- if (!pNode) {
- return NULL;
- }
- IFDE_XMLNode* pXMLNode = pNode->GetXMLMappingNode();
- return (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element)
- ? (IFDE_XMLElement*)pXMLNode
- : NULL;
-}
-FX_BOOL CXFA_FFDoc::SavePackage(const CFX_WideStringC& wsPackage,
- IFX_FileWrite* pFile,
- IXFA_ChecksumContext* pCSContext) {
- IXFA_PacketExport* pExport = IXFA_PacketExport::Create(m_pDocument);
- if (!pExport) {
- return FALSE;
- }
- FX_DWORD packetHash =
- FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength());
- CXFA_Node* pNode = NULL;
- if (packetHash == XFA_HASHCODE_Xfa) {
- pNode = m_pDocument->GetRoot();
- } else {
- CXFA_Object* pObject = m_pDocument->GetXFANode(packetHash);
- pNode = (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL;
- }
- FX_BOOL bFlags = FALSE;
- if (pNode) {
- CFX_ByteString bsChecksum;
- if (pCSContext) {
- pCSContext->GetChecksum(bsChecksum);
- }
- bFlags = pExport->Export(pFile, pNode, 0, bsChecksum.GetLength()
- ? (const FX_CHAR*)bsChecksum
- : NULL);
- } else {
- bFlags = pExport->Export(pFile);
- }
- pExport->Release();
- return bFlags;
-}
-FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) {
- FX_BOOL bRet = FALSE;
- IXFA_PacketImport* pImport = IXFA_PacketImport::Create(m_pDocument);
- if (pImport) {
- bRet = pImport->ImportData(pStream);
- pImport->Release();
- }
- return bRet;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffnotify.h"
+#include "xfa_fontmgr.h"
+CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider)
+ : m_pDocProvider(pDocProvider),
+ m_pDocument(nullptr),
+ m_pStream(nullptr),
+ m_pApp(pApp),
+ m_pNotify(nullptr),
+ m_pPDFDoc(nullptr),
+ m_dwDocType(XFA_DOCTYPE_Static),
+ m_bOwnStream(TRUE) {
+}
+CXFA_FFDoc::~CXFA_FFDoc() {
+ CloseDoc();
+}
+FX_DWORD CXFA_FFDoc::GetDocType() {
+ return m_dwDocType;
+}
+int32_t CXFA_FFDoc::StartLoad() {
+ m_pNotify = new CXFA_FFNotify(this);
+ IXFA_DocParser* pDocParser = IXFA_DocParser::Create(m_pNotify);
+ int32_t iStatus = pDocParser->StartParse(m_pStream);
+ m_pDocument = pDocParser->GetDocument();
+ return iStatus;
+}
+FX_BOOL XFA_GetPDFContentsFromPDFXML(IFDE_XMLNode* pPDFElement,
+ uint8_t*& pByteBuffer,
+ int32_t& iBufferSize) {
+ IFDE_XMLElement* pDocumentElement = NULL;
+ for (IFDE_XMLNode* pXMLNode =
+ pPDFElement->GetNodeItem(IFDE_XMLNode::FirstChild);
+ pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
+ CFX_WideString wsTagName;
+ IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode;
+ pXMLElement->GetTagName(wsTagName);
+ if (wsTagName.Equal(FX_WSTRC(L"document"))) {
+ pDocumentElement = pXMLElement;
+ break;
+ }
+ }
+ }
+ if (!pDocumentElement) {
+ return FALSE;
+ }
+ IFDE_XMLElement* pChunkElement = NULL;
+ for (IFDE_XMLNode* pXMLNode =
+ pDocumentElement->GetNodeItem(IFDE_XMLNode::FirstChild);
+ pXMLNode; pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
+ CFX_WideString wsTagName;
+ IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode;
+ pXMLElement->GetTagName(wsTagName);
+ if (wsTagName.Equal(FX_WSTRC(L"chunk"))) {
+ pChunkElement = pXMLElement;
+ break;
+ }
+ }
+ }
+ if (!pChunkElement) {
+ return FALSE;
+ }
+ CFX_WideString wsPDFContent;
+ pChunkElement->GetTextData(wsPDFContent);
+ iBufferSize = FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), NULL);
+ pByteBuffer = FX_Alloc(uint8_t, iBufferSize + 1);
+ pByteBuffer[iBufferSize] = '0'; // FIXME: I bet this is wrong.
+ FX_Base64DecodeW(wsPDFContent, wsPDFContent.GetLength(), pByteBuffer);
+ return TRUE;
+}
+void XFA_XPDPacket_MergeRootNode(CXFA_Node* pOriginRoot, CXFA_Node* pNewRoot) {
+ CXFA_Node* pChildNode = pNewRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
+ while (pChildNode) {
+ CXFA_Node* pOriginChild =
+ pOriginRoot->GetFirstChildByName(pChildNode->GetNameHash());
+ if (pOriginChild) {
+ pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling);
+ } else {
+ CXFA_Node* pNextSibling =
+ pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling);
+ pNewRoot->RemoveChild(pChildNode);
+ pOriginRoot->InsertChild(pChildNode);
+ pChildNode = pNextSibling;
+ pNextSibling = NULL;
+ }
+ }
+}
+int32_t CXFA_FFDoc::DoLoad(IFX_Pause* pPause) {
+ int32_t iStatus = m_pDocument->GetParser()->DoParse(pPause);
+ if (iStatus == XFA_PARSESTATUS_Done && !m_pPDFDoc) {
+ CXFA_Node* pPDFNode = (CXFA_Node*)m_pDocument->GetXFANode(XFA_HASHCODE_Pdf);
+ if (!pPDFNode) {
+ return XFA_PARSESTATUS_SyntaxErr;
+ }
+ IFDE_XMLNode* pPDFXML = pPDFNode->GetXMLMappingNode();
+ if (pPDFXML->GetType() != FDE_XMLNODE_Element) {
+ return XFA_PARSESTATUS_SyntaxErr;
+ }
+ int32_t iBufferSize = 0;
+ uint8_t* pByteBuffer = NULL;
+ IFX_FileRead* pXFAReader = NULL;
+ if (XFA_GetPDFContentsFromPDFXML(pPDFXML, pByteBuffer, iBufferSize)) {
+ pXFAReader = FX_CreateMemoryStream(pByteBuffer, iBufferSize, TRUE);
+ if (!pXFAReader) {
+ if (pByteBuffer) {
+ FX_Free(pByteBuffer);
+ pByteBuffer = NULL;
+ }
+ return XFA_PARSESTATUS_SyntaxErr;
+ }
+ } else {
+ CFX_WideString wsHref;
+ ((IFDE_XMLElement*)pPDFXML)->GetString(L"href", wsHref);
+ if (!wsHref.IsEmpty()) {
+ pXFAReader = GetDocProvider()->OpenLinkedFile(this, wsHref);
+ }
+ }
+ if (!pXFAReader) {
+ return XFA_PARSESTATUS_SyntaxErr;
+ }
+ CPDF_Document* pPDFDocument =
+ GetDocProvider()->OpenPDF(this, pXFAReader, TRUE);
+ FXSYS_assert(!m_pPDFDoc);
+ if (!OpenDoc(pPDFDocument)) {
+ return XFA_PARSESTATUS_SyntaxErr;
+ }
+ IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument, TRUE);
+ if (!pParser) {
+ return XFA_PARSESTATUS_SyntaxErr;
+ }
+ CXFA_Node* pRootNode = NULL;
+ if (pParser->StartParse(m_pStream) == XFA_PARSESTATUS_Ready &&
+ pParser->DoParse(NULL) == XFA_PARSESTATUS_Done) {
+ pRootNode = pParser->GetRootNode();
+ }
+ if (pRootNode && m_pDocument->GetRoot()) {
+ XFA_XPDPacket_MergeRootNode(m_pDocument->GetRoot(), pRootNode);
+ iStatus = XFA_PARSESTATUS_Done;
+ } else {
+ iStatus = XFA_PARSESTATUS_StatusErr;
+ }
+ pParser->Release();
+ pParser = NULL;
+ }
+ return iStatus;
+}
+void CXFA_FFDoc::StopLoad() {
+ m_pApp->GetXFAFontMgr()->LoadDocFonts(this);
+ m_dwDocType = XFA_DOCTYPE_Static;
+ CXFA_Node* pConfig = (CXFA_Node*)m_pDocument->GetXFANode(XFA_HASHCODE_Config);
+ if (!pConfig) {
+ return;
+ }
+ CXFA_Node* pAcrobat = pConfig->GetFirstChildByClass(XFA_ELEMENT_Acrobat);
+ if (!pAcrobat) {
+ return;
+ }
+ CXFA_Node* pAcrobat7 = pAcrobat->GetFirstChildByClass(XFA_ELEMENT_Acrobat7);
+ if (!pAcrobat7) {
+ return;
+ }
+ CXFA_Node* pDynamicRender =
+ pAcrobat7->GetFirstChildByClass(XFA_ELEMENT_DynamicRender);
+ if (!pDynamicRender) {
+ return;
+ }
+ CFX_WideString wsType;
+ if (pDynamicRender->TryContent(wsType) && wsType == FX_WSTRC(L"required")) {
+ m_dwDocType = XFA_DOCTYPE_Dynamic;
+ }
+}
+IXFA_DocView* CXFA_FFDoc::CreateDocView(FX_DWORD dwView) {
+ CXFA_FFDocView* pDocView =
+ (CXFA_FFDocView*)m_mapTypeToDocView.GetValueAt((void*)(uintptr_t)dwView);
+ if (!pDocView) {
+ pDocView = new CXFA_FFDocView(this);
+ m_mapTypeToDocView.SetAt((void*)(uintptr_t)dwView, pDocView);
+ }
+ return pDocView;
+}
+CXFA_FFDocView* CXFA_FFDoc::GetDocView(IXFA_DocLayout* pLayout) {
+ FX_POSITION ps = m_mapTypeToDocView.GetStartPosition();
+ while (ps) {
+ void* pType;
+ CXFA_FFDocView* pDocView;
+ m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView);
+ if (pDocView->GetXFALayout() == pLayout) {
+ return pDocView;
+ }
+ }
+ return NULL;
+}
+CXFA_FFDocView* CXFA_FFDoc::GetDocView() {
+ FX_POSITION ps = m_mapTypeToDocView.GetStartPosition();
+ if (ps) {
+ void* pType;
+ CXFA_FFDocView* pDocView;
+ m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView);
+ return pDocView;
+ }
+ return NULL;
+}
+FX_BOOL CXFA_FFDoc::OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile) {
+ m_bOwnStream = bTakeOverFile;
+ m_pStream = pStream;
+ return TRUE;
+}
+FX_BOOL CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) {
+ if (pPDFDoc == NULL) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pRoot = pPDFDoc->GetRoot();
+ if (pRoot == NULL) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
+ if (pAcroForm == NULL) {
+ return FALSE;
+ }
+ CPDF_Object* pElementXFA = pAcroForm->GetElementValue("XFA");
+ if (pElementXFA == NULL) {
+ return FALSE;
+ }
+ CFX_ArrayTemplate<CPDF_Stream*> xfaStreams;
+ if (pElementXFA->IsArray()) {
+ CPDF_Array* pXFAArray = (CPDF_Array*)pElementXFA;
+ FX_DWORD count = pXFAArray->GetCount() / 2;
+ for (FX_DWORD i = 0; i < count; i++) {
+ CPDF_Stream* pStream = pXFAArray->GetStream(i * 2 + 1);
+ if (pStream != NULL) {
+ xfaStreams.Add(pStream);
+ }
+ }
+ } else if (pElementXFA->IsStream()) {
+ xfaStreams.Add((CPDF_Stream*)pElementXFA);
+ }
+ if (xfaStreams.GetSize() < 1) {
+ return FALSE;
+ }
+ IFX_FileRead* pFileRead = new CXFA_FileRead(xfaStreams);
+ m_pPDFDoc = pPDFDoc;
+ if (m_pStream) {
+ m_pStream->Release();
+ m_pStream = NULL;
+ }
+ m_pStream = pFileRead;
+ m_bOwnStream = TRUE;
+ return TRUE;
+}
+FX_BOOL CXFA_FFDoc::CloseDoc() {
+ FX_POSITION psClose = m_mapTypeToDocView.GetStartPosition();
+ while (psClose) {
+ void* pType;
+ CXFA_FFDocView* pDocView;
+ m_mapTypeToDocView.GetNextAssoc(psClose, pType, (void*&)pDocView);
+ pDocView->RunDocClose();
+ }
+ if (m_pDocument) {
+ m_pDocument->ClearLayoutData();
+ }
+ FX_POSITION ps = m_mapTypeToDocView.GetStartPosition();
+ while (ps) {
+ void* pType;
+ CXFA_FFDocView* pDocView;
+ m_mapTypeToDocView.GetNextAssoc(ps, pType, (void*&)pDocView);
+ delete pDocView;
+ }
+ m_mapTypeToDocView.RemoveAll();
+ if (m_pDocument) {
+ IXFA_Parser* pParser = m_pDocument->GetParser();
+ pParser->Release();
+ m_pDocument = NULL;
+ }
+ if (m_pNotify) {
+ delete m_pNotify;
+ m_pNotify = NULL;
+ }
+ m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this);
+ if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) {
+ m_pStream->Release();
+ m_pStream = NULL;
+ }
+ ps = m_mapNamedImages.GetStartPosition();
+ while (ps) {
+ void* pName;
+ FX_IMAGEDIB_AND_DPI* pImage = NULL;
+ m_mapNamedImages.GetNextAssoc(ps, pName, (void*&)pImage);
+ if (pImage) {
+ delete pImage->pDibSource;
+ pImage->pDibSource = NULL;
+ FX_Free(pImage);
+ pImage = NULL;
+ }
+ }
+ m_mapNamedImages.RemoveAll();
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->ClearEventTargets(FALSE);
+ return TRUE;
+}
+void CXFA_FFDoc::SetDocType(FX_DWORD dwType) {
+ m_dwDocType = dwType;
+}
+CPDF_Document* CXFA_FFDoc::GetPDFDoc() {
+ return m_pPDFDoc;
+}
+#define _FXLIB_NEW_VERSION_
+CFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi) {
+ if (!m_pPDFDoc) {
+ return NULL;
+ }
+ FX_DWORD dwHash =
+ FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength(), FALSE);
+ FX_IMAGEDIB_AND_DPI* imageDIBDpi = NULL;
+ if (m_mapNamedImages.Lookup((void*)(uintptr_t)dwHash, (void*&)imageDIBDpi)) {
+ iImageXDpi = imageDIBDpi->iImageXDpi;
+ iImageYDpi = imageDIBDpi->iImageYDpi;
+ return (CFX_DIBitmap*)imageDIBDpi->pDibSource;
+ }
+ CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
+ if (pRoot == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pNames = pRoot->GetDict("Names");
+ if (!pNames) {
+ return NULL;
+ }
+ CPDF_Dictionary* pXFAImages = pNames->GetDict("XFAImages");
+ if (!pXFAImages) {
+ return NULL;
+ }
+ CPDF_NameTree nametree(pXFAImages);
+#ifdef _FXLIB_NEW_VERSION_
+ CFX_ByteString bsName = PDF_EncodeText(wsName.GetPtr(), wsName.GetLength());
+ CPDF_Object* pObject = nametree.LookupValue(bsName);
+ if (!pObject) {
+ int32_t iCount = nametree.GetCount();
+ for (int32_t i = 0; i < iCount; i++) {
+ CFX_ByteString bsTemp;
+ CPDF_Object* pTempObject = nametree.LookupValue(i, bsTemp);
+ if (bsTemp == bsName) {
+ pObject = pTempObject;
+ break;
+ }
+ }
+ }
+#else
+ CPDF_Object* pObject = nametree.LookupValue(wsName);
+ if (!pObject) {
+ int32_t iCount = nametree.GetCount();
+ for (int32_t i = 0; i < iCount; i++) {
+ CFX_WideString wsTemp;
+ CPDF_Object* pTempObject = nametree.LookupValue(i, wsTemp);
+ if (wsTemp == wsName) {
+ pObject = pTempObject;
+ break;
+ }
+ }
+ }
+#endif
+ if (!pObject || !pObject->IsStream()) {
+ return NULL;
+ }
+ if (!imageDIBDpi) {
+ imageDIBDpi = FX_Alloc(FX_IMAGEDIB_AND_DPI, 1);
+ imageDIBDpi->pDibSource = NULL;
+ imageDIBDpi->iImageXDpi = 0;
+ imageDIBDpi->iImageYDpi = 0;
+ CPDF_StreamAcc streamAcc;
+ streamAcc.LoadAllData((CPDF_Stream*)pObject);
+ IFX_FileRead* pImageFileRead = FX_CreateMemoryStream(
+ (uint8_t*)streamAcc.GetData(), streamAcc.GetSize());
+ imageDIBDpi->pDibSource = XFA_LoadImageFromBuffer(
+ pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi);
+ imageDIBDpi->iImageXDpi = iImageXDpi;
+ imageDIBDpi->iImageYDpi = iImageYDpi;
+ pImageFileRead->Release();
+ }
+ m_mapNamedImages.SetAt((void*)(uintptr_t)dwHash, imageDIBDpi);
+ return (CFX_DIBitmap*)imageDIBDpi->pDibSource;
+}
+IFDE_XMLElement* CXFA_FFDoc::GetPackageData(const CFX_WideStringC& wsPackage) {
+ FX_DWORD packetHash =
+ FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength());
+ CXFA_Object* pObject = m_pDocument->GetXFANode(packetHash);
+ CXFA_Node* pNode =
+ (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL;
+ if (!pNode) {
+ return NULL;
+ }
+ IFDE_XMLNode* pXMLNode = pNode->GetXMLMappingNode();
+ return (pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element)
+ ? (IFDE_XMLElement*)pXMLNode
+ : NULL;
+}
+FX_BOOL CXFA_FFDoc::SavePackage(const CFX_WideStringC& wsPackage,
+ IFX_FileWrite* pFile,
+ IXFA_ChecksumContext* pCSContext) {
+ IXFA_PacketExport* pExport = IXFA_PacketExport::Create(m_pDocument);
+ if (!pExport) {
+ return FALSE;
+ }
+ FX_DWORD packetHash =
+ FX_HashCode_String_GetW(wsPackage.GetPtr(), wsPackage.GetLength());
+ CXFA_Node* pNode = NULL;
+ if (packetHash == XFA_HASHCODE_Xfa) {
+ pNode = m_pDocument->GetRoot();
+ } else {
+ CXFA_Object* pObject = m_pDocument->GetXFANode(packetHash);
+ pNode = (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL;
+ }
+ FX_BOOL bFlags = FALSE;
+ if (pNode) {
+ CFX_ByteString bsChecksum;
+ if (pCSContext) {
+ pCSContext->GetChecksum(bsChecksum);
+ }
+ bFlags = pExport->Export(pFile, pNode, 0, bsChecksum.GetLength()
+ ? (const FX_CHAR*)bsChecksum
+ : NULL);
+ } else {
+ bFlags = pExport->Export(pFile);
+ }
+ pExport->Release();
+ return bFlags;
+}
+FX_BOOL CXFA_FFDoc::ImportData(IFX_FileRead* pStream, FX_BOOL bXDP) {
+ FX_BOOL bRet = FALSE;
+ IXFA_PacketImport* pImport = IXFA_PacketImport::Create(m_pDocument);
+ if (pImport) {
+ bRet = pImport->ImportData(pStream);
+ pImport->Release();
+ }
+ return bRet;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffdoc.h b/xfa/src/fxfa/src/app/xfa_ffdoc.h
index 1dcbd414fb..f5e6f95250 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdoc.h
+++ b/xfa/src/fxfa/src/app/xfa_ffdoc.h
@@ -1,64 +1,64 @@
-// 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 FXFA_SRC_APP_XFA_FFDOC_H_
-#define FXFA_SRC_APP_XFA_FFDOC_H_
-
-#include "xfa/include/fxfa/fxfa.h"
-
-class CXFA_FFApp;
-class CXFA_FFNotify;
-class CXFA_FFDocView;
-class IXFA_Locale;
-
-typedef struct _FX_IMAGEDIB_AND_DPI {
- CFX_DIBSource* pDibSource;
- int32_t iImageXDpi;
- int32_t iImageYDpi;
-} FX_IMAGEDIB_AND_DPI;
-
-class CXFA_FFDoc : public IXFA_Doc {
- public:
- CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider);
- ~CXFA_FFDoc();
- IXFA_DocProvider* GetDocProvider() { return m_pDocProvider; }
- FX_DWORD GetDocType();
- int32_t StartLoad();
- int32_t DoLoad(IFX_Pause* pPause = NULL);
- void StopLoad();
- IXFA_DocView* CreateDocView(FX_DWORD dwView = 0);
- FX_BOOL OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile);
- FX_BOOL OpenDoc(CPDF_Document* pPDFDoc);
- FX_BOOL CloseDoc();
- void SetDocType(FX_DWORD dwType);
- CXFA_Document* GetXFADoc() { return m_pDocument; }
- CXFA_FFApp* GetApp() { return m_pApp; }
- CXFA_FFDocView* GetDocView(IXFA_DocLayout* pLayout);
- CXFA_FFDocView* GetDocView();
- CPDF_Document* GetPDFDoc();
- CFX_DIBitmap* GetPDFNamedImage(const CFX_WideStringC& wsName,
- int32_t& iImageXDpi,
- int32_t& iImageYDpi);
- IFDE_XMLElement* GetPackageData(const CFX_WideStringC& wsPackage);
- FX_BOOL SavePackage(const CFX_WideStringC& wsPackage,
- IFX_FileWrite* pFile,
- IXFA_ChecksumContext* pCSContext = NULL);
- FX_BOOL ImportData(IFX_FileRead* pStream, FX_BOOL bXDP = TRUE);
-
- protected:
- IXFA_DocProvider* m_pDocProvider;
- CXFA_Document* m_pDocument;
- IFX_FileRead* m_pStream;
- CXFA_FFApp* m_pApp;
- CXFA_FFNotify* m_pNotify;
- CPDF_Document* m_pPDFDoc;
- CFX_MapPtrToPtr m_mapNamedImages;
- CFX_MapPtrToPtr m_mapTypeToDocView;
- FX_DWORD m_dwDocType;
- FX_BOOL m_bOwnStream;
-};
-
-#endif // FXFA_SRC_APP_XFA_FFDOC_H_
+// 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 FXFA_SRC_APP_XFA_FFDOC_H_
+#define FXFA_SRC_APP_XFA_FFDOC_H_
+
+#include "xfa/include/fxfa/fxfa.h"
+
+class CXFA_FFApp;
+class CXFA_FFNotify;
+class CXFA_FFDocView;
+class IXFA_Locale;
+
+typedef struct _FX_IMAGEDIB_AND_DPI {
+ CFX_DIBSource* pDibSource;
+ int32_t iImageXDpi;
+ int32_t iImageYDpi;
+} FX_IMAGEDIB_AND_DPI;
+
+class CXFA_FFDoc : public IXFA_Doc {
+ public:
+ CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocProvider* pDocProvider);
+ ~CXFA_FFDoc();
+ IXFA_DocProvider* GetDocProvider() { return m_pDocProvider; }
+ FX_DWORD GetDocType();
+ int32_t StartLoad();
+ int32_t DoLoad(IFX_Pause* pPause = NULL);
+ void StopLoad();
+ IXFA_DocView* CreateDocView(FX_DWORD dwView = 0);
+ FX_BOOL OpenDoc(IFX_FileRead* pStream, FX_BOOL bTakeOverFile);
+ FX_BOOL OpenDoc(CPDF_Document* pPDFDoc);
+ FX_BOOL CloseDoc();
+ void SetDocType(FX_DWORD dwType);
+ CXFA_Document* GetXFADoc() { return m_pDocument; }
+ CXFA_FFApp* GetApp() { return m_pApp; }
+ CXFA_FFDocView* GetDocView(IXFA_DocLayout* pLayout);
+ CXFA_FFDocView* GetDocView();
+ CPDF_Document* GetPDFDoc();
+ CFX_DIBitmap* GetPDFNamedImage(const CFX_WideStringC& wsName,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi);
+ IFDE_XMLElement* GetPackageData(const CFX_WideStringC& wsPackage);
+ FX_BOOL SavePackage(const CFX_WideStringC& wsPackage,
+ IFX_FileWrite* pFile,
+ IXFA_ChecksumContext* pCSContext = NULL);
+ FX_BOOL ImportData(IFX_FileRead* pStream, FX_BOOL bXDP = TRUE);
+
+ protected:
+ IXFA_DocProvider* m_pDocProvider;
+ CXFA_Document* m_pDocument;
+ IFX_FileRead* m_pStream;
+ CXFA_FFApp* m_pApp;
+ CXFA_FFNotify* m_pNotify;
+ CPDF_Document* m_pPDFDoc;
+ CFX_MapPtrToPtr m_mapNamedImages;
+ CFX_MapPtrToPtr m_mapTypeToDocView;
+ FX_DWORD m_dwDocType;
+ FX_BOOL m_bOwnStream;
+};
+
+#endif // FXFA_SRC_APP_XFA_FFDOC_H_
diff --git a/xfa/src/fxfa/src/app/xfa_ffdochandler.cpp b/xfa/src/fxfa/src/app/xfa_ffdochandler.cpp
index 502da6d14a..c5f6ba6e62 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdochandler.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffdochandler.cpp
@@ -1,109 +1,109 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffdochandler.h"
-#include "xfa_ffdoc.h"
-CXFA_FFDocHandler::CXFA_FFDocHandler() {}
-CXFA_FFDocHandler::~CXFA_FFDocHandler() {}
-void CXFA_FFDocHandler::ReleaseDoc(IXFA_Doc* hDoc) {
- delete hDoc; // virtual dtor.
-}
-IXFA_DocProvider* CXFA_FFDocHandler::GetDocProvider(IXFA_Doc* hDoc) {
- return static_cast<CXFA_FFDoc*>(hDoc)->GetDocProvider();
-}
-FX_DWORD CXFA_FFDocHandler::GetDocType(IXFA_Doc* hDoc) {
- return static_cast<CXFA_FFDoc*>(hDoc)->GetDocType();
-}
-int32_t CXFA_FFDocHandler::StartLoad(IXFA_Doc* hDoc) {
- return static_cast<CXFA_FFDoc*>(hDoc)->StartLoad();
-}
-int32_t CXFA_FFDocHandler::DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause) {
- return static_cast<CXFA_FFDoc*>(hDoc)->DoLoad(pPause);
-}
-void CXFA_FFDocHandler::StopLoad(IXFA_Doc* hDoc) {
- static_cast<CXFA_FFDoc*>(hDoc)->StopLoad();
-}
-
-IXFA_DocView* CXFA_FFDocHandler::CreateDocView(IXFA_Doc* hDoc,
- FX_DWORD dwView) {
- return static_cast<CXFA_FFDoc*>(hDoc)->CreateDocView(dwView);
-}
-int32_t CXFA_FFDocHandler::CountPackages(IXFA_Doc* hDoc) {
- return 0;
-}
-void CXFA_FFDocHandler::GetPackageName(IXFA_Doc* hDoc,
- int32_t iPackage,
- CFX_WideStringC& wsPackage) {}
-IFDE_XMLElement* CXFA_FFDocHandler::GetPackageData(
- IXFA_Doc* hDoc,
- const CFX_WideStringC& wsPackage) {
- return static_cast<CXFA_FFDoc*>(hDoc)->GetPackageData(wsPackage);
-}
-FX_BOOL CXFA_FFDocHandler::SavePackage(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsPackage,
- IFX_FileWrite* pFile,
- IXFA_ChecksumContext* pCSContext) {
- return static_cast<CXFA_FFDoc*>(hDoc)
- ->SavePackage(wsPackage, pFile, pCSContext);
-}
-FX_BOOL CXFA_FFDocHandler::CloseDoc(IXFA_Doc* hDoc) {
- return static_cast<CXFA_FFDoc*>(hDoc)->CloseDoc();
-}
-
-FX_BOOL CXFA_FFDocHandler::ImportData(IXFA_Doc* hDoc,
- IFX_FileRead* pStream,
- FX_BOOL bXDP) {
- return static_cast<CXFA_FFDoc*>(hDoc)->ImportData(pStream, bXDP);
-}
-void CXFA_FFDocHandler::SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime) {
- static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc()->InitScriptContext(hRuntime);
-}
-FXJSE_HVALUE CXFA_FFDocHandler::GetXFAScriptObject(IXFA_Doc* hDoc) {
- CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc();
- if (!pXFADoc) {
- return NULL;
- }
- IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext();
- if (!pScriptContext) {
- return NULL;
- }
- return pScriptContext->GetJSValueFromMap(pXFADoc->GetRoot());
-}
-XFA_ATTRIBUTEENUM CXFA_FFDocHandler::GetRestoreState(IXFA_Doc* hDoc) {
- CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc();
- if (!pXFADoc) {
- return XFA_ATTRIBUTEENUM_Unknown;
- }
- CXFA_Node* pForm = (CXFA_Node*)pXFADoc->GetXFANode(XFA_HASHCODE_Form);
- if (!pForm) {
- return XFA_ATTRIBUTEENUM_Unknown;
- }
- CXFA_Node* pSubForm = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform);
- if (!pSubForm) {
- return XFA_ATTRIBUTEENUM_Unknown;
- }
- return pSubForm->GetEnum(XFA_ATTRIBUTE_RestoreState);
-}
-FX_BOOL CXFA_FFDocHandler::RunDocScript(IXFA_Doc* hDoc,
- XFA_SCRIPTTYPE eScriptType,
- const CFX_WideStringC& wsScript,
- FXJSE_HVALUE hRetValue,
- FXJSE_HVALUE hThisObject) {
- CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc();
- if (!pXFADoc) {
- return FALSE;
- }
- IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext();
- if (!pScriptContext) {
- return FALSE;
- }
- return pScriptContext->RunScript(
- (XFA_SCRIPTLANGTYPE)eScriptType, wsScript, hRetValue,
- hThisObject ? (CXFA_Object*)FXJSE_Value_ToObject(hThisObject, NULL)
- : NULL);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffdochandler.h"
+#include "xfa_ffdoc.h"
+CXFA_FFDocHandler::CXFA_FFDocHandler() {}
+CXFA_FFDocHandler::~CXFA_FFDocHandler() {}
+void CXFA_FFDocHandler::ReleaseDoc(IXFA_Doc* hDoc) {
+ delete hDoc; // virtual dtor.
+}
+IXFA_DocProvider* CXFA_FFDocHandler::GetDocProvider(IXFA_Doc* hDoc) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->GetDocProvider();
+}
+FX_DWORD CXFA_FFDocHandler::GetDocType(IXFA_Doc* hDoc) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->GetDocType();
+}
+int32_t CXFA_FFDocHandler::StartLoad(IXFA_Doc* hDoc) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->StartLoad();
+}
+int32_t CXFA_FFDocHandler::DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->DoLoad(pPause);
+}
+void CXFA_FFDocHandler::StopLoad(IXFA_Doc* hDoc) {
+ static_cast<CXFA_FFDoc*>(hDoc)->StopLoad();
+}
+
+IXFA_DocView* CXFA_FFDocHandler::CreateDocView(IXFA_Doc* hDoc,
+ FX_DWORD dwView) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->CreateDocView(dwView);
+}
+int32_t CXFA_FFDocHandler::CountPackages(IXFA_Doc* hDoc) {
+ return 0;
+}
+void CXFA_FFDocHandler::GetPackageName(IXFA_Doc* hDoc,
+ int32_t iPackage,
+ CFX_WideStringC& wsPackage) {}
+IFDE_XMLElement* CXFA_FFDocHandler::GetPackageData(
+ IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsPackage) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->GetPackageData(wsPackage);
+}
+FX_BOOL CXFA_FFDocHandler::SavePackage(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsPackage,
+ IFX_FileWrite* pFile,
+ IXFA_ChecksumContext* pCSContext) {
+ return static_cast<CXFA_FFDoc*>(hDoc)
+ ->SavePackage(wsPackage, pFile, pCSContext);
+}
+FX_BOOL CXFA_FFDocHandler::CloseDoc(IXFA_Doc* hDoc) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->CloseDoc();
+}
+
+FX_BOOL CXFA_FFDocHandler::ImportData(IXFA_Doc* hDoc,
+ IFX_FileRead* pStream,
+ FX_BOOL bXDP) {
+ return static_cast<CXFA_FFDoc*>(hDoc)->ImportData(pStream, bXDP);
+}
+void CXFA_FFDocHandler::SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime) {
+ static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc()->InitScriptContext(hRuntime);
+}
+FXJSE_HVALUE CXFA_FFDocHandler::GetXFAScriptObject(IXFA_Doc* hDoc) {
+ CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc();
+ if (!pXFADoc) {
+ return NULL;
+ }
+ IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext();
+ if (!pScriptContext) {
+ return NULL;
+ }
+ return pScriptContext->GetJSValueFromMap(pXFADoc->GetRoot());
+}
+XFA_ATTRIBUTEENUM CXFA_FFDocHandler::GetRestoreState(IXFA_Doc* hDoc) {
+ CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc();
+ if (!pXFADoc) {
+ return XFA_ATTRIBUTEENUM_Unknown;
+ }
+ CXFA_Node* pForm = (CXFA_Node*)pXFADoc->GetXFANode(XFA_HASHCODE_Form);
+ if (!pForm) {
+ return XFA_ATTRIBUTEENUM_Unknown;
+ }
+ CXFA_Node* pSubForm = pForm->GetFirstChildByClass(XFA_ELEMENT_Subform);
+ if (!pSubForm) {
+ return XFA_ATTRIBUTEENUM_Unknown;
+ }
+ return pSubForm->GetEnum(XFA_ATTRIBUTE_RestoreState);
+}
+FX_BOOL CXFA_FFDocHandler::RunDocScript(IXFA_Doc* hDoc,
+ XFA_SCRIPTTYPE eScriptType,
+ const CFX_WideStringC& wsScript,
+ FXJSE_HVALUE hRetValue,
+ FXJSE_HVALUE hThisObject) {
+ CXFA_Document* pXFADoc = static_cast<CXFA_FFDoc*>(hDoc)->GetXFADoc();
+ if (!pXFADoc) {
+ return FALSE;
+ }
+ IXFA_ScriptContext* pScriptContext = pXFADoc->GetScriptContext();
+ if (!pScriptContext) {
+ return FALSE;
+ }
+ return pScriptContext->RunScript(
+ (XFA_SCRIPTLANGTYPE)eScriptType, wsScript, hRetValue,
+ hThisObject ? (CXFA_Object*)FXJSE_Value_ToObject(hThisObject, NULL)
+ : NULL);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffdochandler.h b/xfa/src/fxfa/src/app/xfa_ffdochandler.h
index 5f9ab78106..4fdf849bf7 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdochandler.h
+++ b/xfa/src/fxfa/src/app/xfa_ffdochandler.h
@@ -1,48 +1,48 @@
-// 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 XFA_FFDOCHANDLER_H_
-#define XFA_FFDOCHANDLER_H_
-
-class CXFA_FFDocHandler : public IXFA_DocHandler {
- public:
- CXFA_FFDocHandler();
- ~CXFA_FFDocHandler();
- virtual void ReleaseDoc(IXFA_Doc* hDoc);
- virtual IXFA_DocProvider* GetDocProvider(IXFA_Doc* hDoc);
- virtual FX_DWORD GetDocType(IXFA_Doc* hDoc);
- virtual int32_t StartLoad(IXFA_Doc* hDoc);
- virtual int32_t DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause = NULL);
- virtual void StopLoad(IXFA_Doc* hDoc);
-
- virtual IXFA_DocView* CreateDocView(IXFA_Doc* hDoc, FX_DWORD dwView = 0);
- virtual int32_t CountPackages(IXFA_Doc* hDoc);
- virtual void GetPackageName(IXFA_Doc* hDoc,
- int32_t iPackage,
- CFX_WideStringC& wsPackage);
- virtual IFDE_XMLElement* GetPackageData(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsPackage);
- virtual FX_BOOL SavePackage(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsPackage,
- IFX_FileWrite* pFile,
- IXFA_ChecksumContext* pCSContext = NULL);
- virtual FX_BOOL CloseDoc(IXFA_Doc* hDoc);
- virtual FX_BOOL ImportData(IXFA_Doc* hDoc,
- IFX_FileRead* pStream,
- FX_BOOL bXDP = TRUE);
- virtual void SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime);
- virtual FXJSE_HVALUE GetXFAScriptObject(IXFA_Doc* hDoc);
- virtual XFA_ATTRIBUTEENUM GetRestoreState(IXFA_Doc* hDoc);
- virtual FX_BOOL RunDocScript(IXFA_Doc* hDoc,
- XFA_SCRIPTTYPE eScriptType,
- const CFX_WideStringC& wsScript,
- FXJSE_HVALUE hRetValue,
- FXJSE_HVALUE hThisObject);
-
- protected:
-};
-
-#endif // XFA_FFDOCHANDLER_H_
+// 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 XFA_FFDOCHANDLER_H_
+#define XFA_FFDOCHANDLER_H_
+
+class CXFA_FFDocHandler : public IXFA_DocHandler {
+ public:
+ CXFA_FFDocHandler();
+ ~CXFA_FFDocHandler();
+ virtual void ReleaseDoc(IXFA_Doc* hDoc);
+ virtual IXFA_DocProvider* GetDocProvider(IXFA_Doc* hDoc);
+ virtual FX_DWORD GetDocType(IXFA_Doc* hDoc);
+ virtual int32_t StartLoad(IXFA_Doc* hDoc);
+ virtual int32_t DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause = NULL);
+ virtual void StopLoad(IXFA_Doc* hDoc);
+
+ virtual IXFA_DocView* CreateDocView(IXFA_Doc* hDoc, FX_DWORD dwView = 0);
+ virtual int32_t CountPackages(IXFA_Doc* hDoc);
+ virtual void GetPackageName(IXFA_Doc* hDoc,
+ int32_t iPackage,
+ CFX_WideStringC& wsPackage);
+ virtual IFDE_XMLElement* GetPackageData(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsPackage);
+ virtual FX_BOOL SavePackage(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsPackage,
+ IFX_FileWrite* pFile,
+ IXFA_ChecksumContext* pCSContext = NULL);
+ virtual FX_BOOL CloseDoc(IXFA_Doc* hDoc);
+ virtual FX_BOOL ImportData(IXFA_Doc* hDoc,
+ IFX_FileRead* pStream,
+ FX_BOOL bXDP = TRUE);
+ virtual void SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime);
+ virtual FXJSE_HVALUE GetXFAScriptObject(IXFA_Doc* hDoc);
+ virtual XFA_ATTRIBUTEENUM GetRestoreState(IXFA_Doc* hDoc);
+ virtual FX_BOOL RunDocScript(IXFA_Doc* hDoc,
+ XFA_SCRIPTTYPE eScriptType,
+ const CFX_WideStringC& wsScript,
+ FXJSE_HVALUE hRetValue,
+ FXJSE_HVALUE hThisObject);
+
+ protected:
+};
+
+#endif // XFA_FFDOCHANDLER_H_
diff --git a/xfa/src/fxfa/src/app/xfa_ffdocview.cpp b/xfa/src/fxfa/src/app/xfa_ffdocview.cpp
index f85ba65855..59d4a59f0d 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdocview.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffdocview.cpp
@@ -1,936 +1,936 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffwidgethandler.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpushbutton.h"
-#include "xfa_ffcheckbutton.h"
-#include "xfa_ffchoicelist.h"
-#include "xfa_ffimageedit.h"
-#include "xfa_fftextedit.h"
-#include "xfa_ffbarcode.h"
-#include "xfa_ffdraw.h"
-#include "xfa_fftext.h"
-#include "xfa_ffpath.h"
-#include "xfa_ffimage.h"
-#include "xfa_ffexclgroup.h"
-#include "xfa_ffsubform.h"
-#include "xfa_ffsignature.h"
-#include "xfa_ffapp.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffwidgetacc.h"
-extern const XFA_ATTRIBUTEENUM gs_EventActivity[] = {
- XFA_ATTRIBUTEENUM_Click, XFA_ATTRIBUTEENUM_Change,
- XFA_ATTRIBUTEENUM_DocClose, XFA_ATTRIBUTEENUM_DocReady,
- XFA_ATTRIBUTEENUM_Enter, XFA_ATTRIBUTEENUM_Exit,
- XFA_ATTRIBUTEENUM_Full, XFA_ATTRIBUTEENUM_IndexChange,
- XFA_ATTRIBUTEENUM_Initialize, XFA_ATTRIBUTEENUM_MouseDown,
- XFA_ATTRIBUTEENUM_MouseEnter, XFA_ATTRIBUTEENUM_MouseExit,
- XFA_ATTRIBUTEENUM_MouseUp, XFA_ATTRIBUTEENUM_PostExecute,
- XFA_ATTRIBUTEENUM_PostOpen, XFA_ATTRIBUTEENUM_PostPrint,
- XFA_ATTRIBUTEENUM_PostSave, XFA_ATTRIBUTEENUM_PostSign,
- XFA_ATTRIBUTEENUM_PostSubmit, XFA_ATTRIBUTEENUM_PreExecute,
- XFA_ATTRIBUTEENUM_PreOpen, XFA_ATTRIBUTEENUM_PrePrint,
- XFA_ATTRIBUTEENUM_PreSave, XFA_ATTRIBUTEENUM_PreSign,
- XFA_ATTRIBUTEENUM_PreSubmit, XFA_ATTRIBUTEENUM_Ready,
- XFA_ATTRIBUTEENUM_Unknown,
-};
-CXFA_FFDocView::CXFA_FFDocView(CXFA_FFDoc* pDoc)
- : m_bLayoutEvent(FALSE),
- m_pListFocusWidget(nullptr),
- m_bInLayoutStatus(FALSE),
- m_pDoc(pDoc),
- m_pWidgetHandler(nullptr),
- m_pXFADocLayout(nullptr),
- m_pFocusAcc(nullptr),
- m_pFocusWidget(nullptr),
- m_pOldFocusWidget(nullptr),
- m_iStatus(XFA_DOCVIEW_LAYOUTSTATUS_None),
- m_iLock(0) {
-}
-CXFA_FFDocView::~CXFA_FFDocView() {
- DestroyDocView();
- if (m_pWidgetHandler) {
- delete m_pWidgetHandler;
- }
- m_pWidgetHandler = NULL;
-}
-void CXFA_FFDocView::InitLayout(CXFA_Node* pNode) {
- RunBindItems();
- ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Initialize);
- ExecEventActivityByDeepFirst(pNode, XFA_EVENT_IndexChange);
-}
-int32_t CXFA_FFDocView::StartLayout(int32_t iStartPage) {
- m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start;
- m_pDoc->GetXFADoc()->DoProtoMerge();
- m_pDoc->GetXFADoc()->DoDataMerge();
- m_pXFADocLayout = GetXFALayout();
- int32_t iStatus = m_pXFADocLayout->StartLayout();
- if (iStatus < 0) {
- return iStatus;
- }
- CXFA_Node* pRootItem =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
- if (!pRootItem) {
- return iStatus;
- }
- InitLayout(pRootItem);
- InitCalculate(pRootItem);
- InitValidate(pRootItem);
- ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, TRUE);
- m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start;
- return iStatus;
-}
-int32_t CXFA_FFDocView::DoLayout(IFX_Pause* pPause) {
- int32_t iStatus = 100;
- iStatus = m_pXFADocLayout->DoLayout(pPause);
- if (iStatus != 100) {
- return iStatus;
- }
- m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Doing;
- return iStatus;
-}
-void CXFA_FFDocView::StopLayout() {
- CXFA_Node* pRootItem =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
- if (!pRootItem) {
- return;
- }
- CXFA_Node* pSubformNode = pRootItem->GetChild(0, XFA_ELEMENT_Subform);
- if (!pSubformNode) {
- return;
- }
- CXFA_Node* pPageSetNode =
- pSubformNode->GetFirstChildByClass(XFA_ELEMENT_PageSet);
- if (!pPageSetNode) {
- return;
- }
- RunCalculateWidgets();
- RunValidate();
- InitLayout(pPageSetNode);
- InitCalculate(pPageSetNode);
- InitValidate(pPageSetNode);
- ExecEventActivityByDeepFirst(pPageSetNode, XFA_EVENT_Ready, TRUE);
- ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready);
- ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocReady);
- RunCalculateWidgets();
- RunValidate();
- if (RunLayout()) {
- ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready);
- }
- m_CalculateAccs.RemoveAll();
- if (m_pFocusAcc && !m_pFocusWidget) {
- SetFocusWidgetAcc(m_pFocusAcc);
- }
- m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_End;
-}
-int32_t CXFA_FFDocView::GetLayoutStatus() {
- return m_iStatus;
-}
-void CXFA_FFDocView::ShowNullTestMsg() {
- int32_t iCount = m_arrNullTestMsg.GetSize();
- CXFA_FFApp* pApp = m_pDoc->GetApp();
- IXFA_AppProvider* pAppProvider = pApp->GetAppProvider();
- if (pAppProvider && iCount) {
- int32_t iRemain = iCount > 7 ? iCount - 7 : 0;
- iCount -= iRemain;
- CFX_WideString wsMsg;
- for (int32_t i = 0; i < iCount; i++) {
- wsMsg += m_arrNullTestMsg[i] + FX_WSTRC(L"\n");
- }
- if (iRemain > 0) {
- CFX_WideString wsLimit;
- pAppProvider->LoadString(XFA_IDS_ValidateLimit, wsLimit);
- if (!wsLimit.IsEmpty()) {
- CFX_WideString wsTemp;
- wsTemp.Format((const FX_WCHAR*)wsLimit, iRemain);
- wsMsg += FX_WSTRC(L"\n") + wsTemp;
- }
- }
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
- pAppProvider->MsgBox(wsMsg, wsTitle, XFA_MBICON_Status, XFA_MB_OK);
- }
- m_arrNullTestMsg.RemoveAll();
-}
-void CXFA_FFDocView::UpdateDocView() {
- if (IsUpdateLocked()) {
- return;
- }
- LockUpdate();
- int32_t iNewAdds = m_NewAddedNodes.GetSize();
- for (int32_t i = 0; i < iNewAdds; i++) {
- CXFA_Node* pNode = (CXFA_Node*)m_NewAddedNodes[i];
- InitCalculate(pNode);
- InitValidate(pNode);
- ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, TRUE);
- }
- m_NewAddedNodes.RemoveAll();
- this->RunSubformIndexChange();
- this->RunCalculateWidgets();
- this->RunValidate();
- ShowNullTestMsg();
- m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Next;
- if (RunLayout() && m_bLayoutEvent) {
- RunEventLayoutReady();
- }
- m_bLayoutEvent = FALSE;
- m_CalculateAccs.RemoveAll();
- this->RunInvalidate();
- UnlockUpdate();
-}
-int32_t CXFA_FFDocView::CountPageViews() {
- if (!m_pXFADocLayout) {
- return 0;
- }
- return m_pXFADocLayout->CountPages();
-}
-IXFA_PageView* CXFA_FFDocView::GetPageView(int32_t nIndex) {
- if (!m_pXFADocLayout) {
- return NULL;
- }
- return static_cast<CXFA_FFPageView*>(m_pXFADocLayout->GetPage(nIndex));
-}
-IXFA_Widget* CXFA_FFDocView::GetWidgetByName(const CFX_WideStringC& wsName) {
- return GetWidgetByName(wsName, NULL);
-}
-CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName(
- const CFX_WideStringC& wsName) {
- return GetWidgetAccByName(wsName, NULL);
-}
-IXFA_DocLayout* CXFA_FFDocView::GetXFALayout() const {
- return m_pDoc->GetXFADoc()->GetDocLayout();
-}
-FX_BOOL CXFA_FFDocView::ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc) {
- CXFA_Node* pNode = pWidgetAcc->GetNode();
- XFA_ELEMENT eType = pNode->GetClassID();
- if (eType != XFA_ELEMENT_Field && eType != XFA_ELEMENT_ExclGroup) {
- return FALSE;
- }
- FX_BOOL bNotify = IsStaticNotify();
- pWidgetAcc->ResetData();
- pWidgetAcc->UpdateUIDisplay();
- if (bNotify) {
- pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, NULL,
- NULL);
- }
- if (CXFA_Validate validate = pWidgetAcc->GetValidate()) {
- AddValidateWidget(pWidgetAcc);
- ((CXFA_Node*)validate)->SetFlag(XFA_NODEFLAG_NeedsInitApp, TRUE, FALSE);
- }
- return TRUE;
-}
-void CXFA_FFDocView::ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc) {
- m_bLayoutEvent = TRUE;
- FX_BOOL bChanged = FALSE;
- CXFA_Node* pFormNode = NULL;
- if (pWidgetAcc) {
- bChanged = ResetSingleWidgetAccData(pWidgetAcc);
- pFormNode = pWidgetAcc->GetNode();
- } else {
- pFormNode = GetRootSubform();
- }
- if (!pFormNode) {
- return;
- }
- if (pFormNode->GetClassID() != XFA_ELEMENT_Field &&
- pFormNode->GetClassID() != XFA_ELEMENT_ExclGroup) {
- CXFA_WidgetAccIterator Iterator(this, pFormNode);
- while (CXFA_WidgetAcc* pAcc = Iterator.MoveToNext()) {
- bChanged |= ResetSingleWidgetAccData(pAcc);
- if (pAcc->GetNode()->GetClassID() == XFA_ELEMENT_ExclGroup) {
- Iterator.SkipTree();
- }
- }
- }
- if (bChanged) {
- m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
- }
-}
-int32_t CXFA_FFDocView::ProcessWidgetEvent(CXFA_EventParam* pParam,
- CXFA_WidgetAcc* pWidgetAcc) {
- if (pParam == NULL) {
- return XFA_EVENTERROR_Error;
- }
- if (pParam->m_eType == XFA_EVENT_Validate) {
- CFX_WideString wsValidateStr = FX_WSTRC(L"preSubmit");
- CXFA_Node* pConfigItem =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Config);
- if (pConfigItem) {
- CXFA_Node* pValidateNode = NULL;
- CXFA_Node* pAcrobatNode = pConfigItem->GetChild(0, XFA_ELEMENT_Acrobat);
- pValidateNode =
- pAcrobatNode ? pAcrobatNode->GetChild(0, XFA_ELEMENT_Validate) : NULL;
- if (!pValidateNode) {
- CXFA_Node* pPresentNode = pConfigItem->GetChild(0, XFA_ELEMENT_Present);
- pValidateNode = pPresentNode
- ? pPresentNode->GetChild(0, XFA_ELEMENT_Validate)
- : NULL;
- }
- if (pValidateNode) {
- wsValidateStr = pValidateNode->GetContent();
- }
- }
- FX_BOOL bValidate = FALSE;
- switch (pParam->m_iValidateActivities) {
- case XFA_VALIDATE_preSubmit:
- bValidate = wsValidateStr.Find(L"preSubmit") != -1;
- break;
- case XFA_VALIDATE_prePrint:
- bValidate = wsValidateStr.Find(L"prePrint") != -1;
- break;
- case XFA_VALIDATE_preExecute:
- bValidate = wsValidateStr.Find(L"preExecute") != -1;
- break;
- case XFA_VALIDATE_preSave:
- bValidate = wsValidateStr.Find(L"preSave") != -1;
- break;
- }
- if (!bValidate) {
- return XFA_EVENTERROR_Sucess;
- }
- }
- CXFA_Node* pNode = pWidgetAcc ? pWidgetAcc->GetNode() : NULL;
- if (!pNode) {
- CXFA_Node* pRootItem =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
- if (!pRootItem) {
- return XFA_EVENTERROR_Error;
- }
- pNode = pRootItem->GetChild(0, XFA_ELEMENT_Subform);
- }
- ExecEventActivityByDeepFirst(pNode, pParam->m_eType, pParam->m_bIsFormReady);
- return XFA_EVENTERROR_Sucess;
-}
-IXFA_WidgetHandler* CXFA_FFDocView::GetWidgetHandler() {
- if (!m_pWidgetHandler) {
- m_pWidgetHandler = new CXFA_FFWidgetHandler(this);
- }
- return m_pWidgetHandler;
-}
-IXFA_WidgetIterator* CXFA_FFDocView::CreateWidgetIterator() {
- CXFA_Node* pFormRoot = GetRootSubform();
- if (!pFormRoot) {
- return NULL;
- }
- return new CXFA_FFDocWidgetIterator(this, pFormRoot);
-}
-IXFA_WidgetAccIterator* CXFA_FFDocView::CreateWidgetAccIterator(
- XFA_WIDGETORDER eOrder) {
- CXFA_Node* pFormRoot = GetRootSubform();
- if (!pFormRoot) {
- return NULL;
- }
- return new CXFA_WidgetAccIterator(this, pFormRoot);
-}
-IXFA_Widget* CXFA_FFDocView::GetFocusWidget() {
- return m_pFocusWidget;
-}
-void CXFA_FFDocView::KillFocus() {
- if (m_pFocusWidget &&
- (m_pFocusWidget->GetStatus() & XFA_WIDGETSTATUS_Focused)) {
- (m_pFocusWidget)->OnKillFocus(NULL);
- }
- m_pFocusAcc = NULL;
- m_pFocusWidget = NULL;
- m_pOldFocusWidget = NULL;
-}
-FX_BOOL CXFA_FFDocView::SetFocus(IXFA_Widget* hWidget) {
- CXFA_FFWidget* pNewFocus = (CXFA_FFWidget*)hWidget;
- if (m_pOldFocusWidget == pNewFocus) {
- return FALSE;
- }
- CXFA_FFWidget* pOldFocus = m_pOldFocusWidget;
- m_pOldFocusWidget = pNewFocus;
- if (pOldFocus) {
- if (m_pFocusWidget != m_pOldFocusWidget &&
- (pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Focused)) {
- m_pFocusWidget = pOldFocus;
- pOldFocus->OnKillFocus(pNewFocus);
- } else if ((pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
- if (!pOldFocus->IsLoaded()) {
- pOldFocus->LoadWidget();
- }
- pOldFocus->OnSetFocus(m_pFocusWidget);
- m_pFocusWidget = pOldFocus;
- pOldFocus->OnKillFocus(pNewFocus);
- }
- }
- if (m_pFocusWidget == m_pOldFocusWidget) {
- return FALSE;
- }
- pNewFocus = m_pOldFocusWidget;
- if (m_pListFocusWidget && pNewFocus == m_pListFocusWidget) {
- m_pFocusAcc = NULL;
- m_pFocusWidget = NULL;
- m_pListFocusWidget = NULL;
- m_pOldFocusWidget = NULL;
- return FALSE;
- }
- if (pNewFocus && (pNewFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
- if (!pNewFocus->IsLoaded()) {
- pNewFocus->LoadWidget();
- }
- pNewFocus->OnSetFocus(m_pFocusWidget);
- }
- m_pFocusAcc = pNewFocus ? pNewFocus->GetDataAcc() : NULL;
- m_pFocusWidget = pNewFocus;
- m_pOldFocusWidget = m_pFocusWidget;
- return TRUE;
-}
-CXFA_WidgetAcc* CXFA_FFDocView::GetFocusWidgetAcc() {
- return m_pFocusAcc;
-}
-void CXFA_FFDocView::SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) {
- CXFA_FFWidget* pNewFocus =
- pWidgetAcc ? pWidgetAcc->GetNextWidget(NULL) : NULL;
- if (SetFocus(pNewFocus)) {
- m_pFocusAcc = pWidgetAcc;
- if (m_iStatus >= XFA_DOCVIEW_LAYOUTSTATUS_End) {
- m_pDoc->GetDocProvider()->SetFocusWidget(m_pDoc, m_pFocusWidget);
- }
- }
-}
-void CXFA_FFDocView::DeleteLayoutItem(CXFA_FFWidget* pWidget) {
- if (m_pFocusAcc == pWidget->GetDataAcc()) {
- m_pFocusAcc = NULL;
- m_pFocusWidget = NULL;
- m_pOldFocusWidget = NULL;
- }
-}
-static int32_t XFA_ProcessEvent(CXFA_FFDocView* pDocView,
- CXFA_WidgetAcc* pWidgetAcc,
- CXFA_EventParam* pParam) {
- if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) {
- return XFA_EVENTERROR_NotExist;
- }
- if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
- return XFA_EVENTERROR_NotExist;
- }
- switch (pParam->m_eType) {
- case XFA_EVENT_Calculate:
- return pWidgetAcc->ProcessCalculate();
- case XFA_EVENT_Validate:
- if (((CXFA_FFDoc*)pDocView->GetDoc())
- ->GetDocProvider()
- ->IsValidationsEnabled(pDocView->GetDoc())) {
- return pWidgetAcc->ProcessValidate(0x01);
- }
- return XFA_EVENTERROR_Disabled;
- case XFA_EVENT_InitCalculate: {
- CXFA_Calculate calc = pWidgetAcc->GetCalculate();
- if (!calc) {
- return XFA_EVENTERROR_NotExist;
- }
- if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return XFA_EVENTERROR_Disabled;
- }
- CXFA_Script script = calc.GetScript();
- return pWidgetAcc->ExecuteScript(script, pParam);
- }
- default:
- break;
- }
- int32_t iRet =
- pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam);
- return iRet;
-}
-int32_t CXFA_FFDocView::ExecEventActivityByDeepFirst(CXFA_Node* pFormNode,
- XFA_EVENTTYPE eEventType,
- FX_BOOL bIsFormReady,
- FX_BOOL bRecursive,
- CXFA_Node* pExclude) {
- int32_t iRet = XFA_EVENTERROR_NotExist;
- if (pFormNode == pExclude) {
- return iRet;
- }
- XFA_ELEMENT elementType = pFormNode->GetClassID();
- if (elementType == XFA_ELEMENT_Field) {
- if (eEventType == XFA_EVENT_IndexChange) {
- return iRet;
- }
- CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pFormNode->GetWidgetData();
- if (pWidgetAcc == NULL) {
- return iRet;
- }
- CXFA_EventParam eParam;
- eParam.m_eType = eEventType;
- eParam.m_pTarget = pWidgetAcc;
- eParam.m_bIsFormReady = bIsFormReady;
- return XFA_ProcessEvent(this, pWidgetAcc, &eParam);
- }
- if (bRecursive) {
- for (CXFA_Node* pNode = pFormNode->GetNodeItem(
- XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode);
- pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling,
- XFA_OBJECTTYPE_ContainerNode)) {
- elementType = pNode->GetClassID();
- if (elementType != XFA_ELEMENT_Variables &&
- elementType != XFA_ELEMENT_Draw) {
- iRet |= ExecEventActivityByDeepFirst(pNode, eEventType, bIsFormReady,
- bRecursive, pExclude);
- }
- }
- }
- CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pFormNode->GetWidgetData();
- if (pWidgetAcc == NULL) {
- return iRet;
- }
- CXFA_EventParam eParam;
- eParam.m_eType = eEventType;
- eParam.m_pTarget = pWidgetAcc;
- eParam.m_bIsFormReady = bIsFormReady;
- iRet |= XFA_ProcessEvent(this, pWidgetAcc, &eParam);
- return iRet;
-}
-CXFA_FFWidget* CXFA_FFDocView::GetWidgetByName(const CFX_WideStringC& wsName,
- CXFA_FFWidget* pRefWidget) {
- CXFA_WidgetAcc* pRefAcc = pRefWidget ? pRefWidget->GetDataAcc() : NULL;
- if (CXFA_WidgetAcc* pAcc = GetWidgetAccByName(wsName, pRefAcc)) {
- return pAcc->GetNextWidget(NULL);
- }
- return NULL;
-}
-CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName(
- const CFX_WideStringC& wsName,
- CXFA_WidgetAcc* pRefWidgetAcc) {
- CFX_WideString wsExpression;
- FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
- XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent;
- IXFA_ScriptContext* pScriptContext = m_pDoc->GetXFADoc()->GetScriptContext();
- if (!pScriptContext) {
- return NULL;
- }
- CXFA_Node* refNode = NULL;
- if (pRefWidgetAcc != NULL) {
- refNode = pRefWidgetAcc->GetNode();
- wsExpression = wsName;
- } else {
- wsExpression = L"$form." + wsName;
- }
- XFA_RESOLVENODE_RS resoveNodeRS;
- int32_t iRet = pScriptContext->ResolveObjects(refNode, wsExpression,
- resoveNodeRS, dwStyle);
- if (iRet < 1) {
- return NULL;
- }
- if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
- CXFA_Object* pNode = resoveNodeRS.nodes[0];
- if (pNode->IsNode()) {
- return (CXFA_WidgetAcc*)((CXFA_Node*)pNode)->GetWidgetData();
- }
- }
- return NULL;
-}
-void CXFA_FFDocView::OnPageEvent(IXFA_LayoutPage* pSender,
- XFA_PAGEEVENT eEvent,
- int32_t iPageIndex) {
- FX_BOOL bNofify = m_iStatus >= XFA_DOCVIEW_LAYOUTSTATUS_End;
- CXFA_FFPageView* pFFPageView = static_cast<CXFA_FFPageView*>(pSender);
- if (eEvent == XFA_PAGEEVENT_PageRemoved) {
- if (bNofify) {
- m_pDoc->GetDocProvider()->PageViewEvent(pFFPageView,
- XFA_PAGEVIEWEVENT_PostRemoved);
- }
- } else if (eEvent == XFA_PAGEEVENT_PageAdded) {
- if (bNofify) {
- m_pDoc->GetDocProvider()->PageViewEvent(pFFPageView,
- XFA_PAGEVIEWEVENT_PostAdded);
- pFFPageView->LoadPageView();
- }
- }
-}
-void CXFA_FFDocView::LockUpdate() {
- m_iLock++;
-}
-void CXFA_FFDocView::UnlockUpdate() {
- m_iLock--;
-}
-FX_BOOL CXFA_FFDocView::IsUpdateLocked() {
- return m_iLock;
-}
-void CXFA_FFDocView::ClearInvalidateList() {
- FX_POSITION ps = m_mapPageInvalidate.GetStartPosition();
- while (ps) {
- void* pPageView = NULL;
- CFX_RectF* pRect = NULL;
- m_mapPageInvalidate.GetNextAssoc(ps, pPageView, (void*&)pRect);
- delete pRect;
- }
- m_mapPageInvalidate.RemoveAll();
-}
-void CXFA_FFDocView::AddInvalidateRect(CXFA_FFWidget* pWidget,
- const CFX_RectF& rtInvalidate) {
- AddInvalidateRect(pWidget->GetPageView(), rtInvalidate);
-}
-void CXFA_FFDocView::AddInvalidateRect(IXFA_PageView* pPageView,
- const CFX_RectF& rtInvalidate) {
- CFX_RectF* pRect = (CFX_RectF*)m_mapPageInvalidate.GetValueAt(pPageView);
- if (!pRect) {
- pRect = new CFX_RectF;
- pRect->Set(rtInvalidate.left, rtInvalidate.top, rtInvalidate.width,
- rtInvalidate.height);
- m_mapPageInvalidate.SetAt(pPageView, pRect);
- } else {
- pRect->Union(rtInvalidate);
- }
-}
-void CXFA_FFDocView::RunInvalidate() {
- FX_POSITION ps = m_mapPageInvalidate.GetStartPosition();
- while (ps) {
- IXFA_PageView* pPageView = NULL;
- CFX_RectF* pRect = NULL;
- m_mapPageInvalidate.GetNextAssoc(ps, (void*&)pPageView, (void*&)pRect);
- m_pDoc->GetDocProvider()->InvalidateRect(pPageView, *pRect);
- delete pRect;
- }
- m_mapPageInvalidate.RemoveAll();
-}
-FX_BOOL CXFA_FFDocView::RunLayout() {
- LockUpdate();
- m_bInLayoutStatus = TRUE;
- if (!m_pXFADocLayout->IncrementLayout() &&
- m_pXFADocLayout->StartLayout() < 100) {
- m_pXFADocLayout->DoLayout();
- UnlockUpdate();
- m_bInLayoutStatus = FALSE;
- return TRUE;
- }
- m_bInLayoutStatus = FALSE;
- UnlockUpdate();
- return FALSE;
-}
-void CXFA_FFDocView::RunSubformIndexChange() {
- int32_t iSubforms = m_IndexChangedSubforms.GetSize();
- for (int32_t i = 0; i < iSubforms; i++) {
- CXFA_Node* pSubformNode = (CXFA_Node*)m_IndexChangedSubforms[i];
- CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pSubformNode->GetWidgetData();
- if (!pWidgetAcc) {
- continue;
- }
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_IndexChange;
- eParam.m_pTarget = pWidgetAcc;
- pWidgetAcc->ProcessEvent(XFA_ATTRIBUTEENUM_IndexChange, &eParam);
- }
- m_IndexChangedSubforms.RemoveAll();
-}
-void CXFA_FFDocView::AddNewFormNode(CXFA_Node* pNode) {
- m_NewAddedNodes.Add(pNode);
- this->InitLayout(pNode);
-}
-void CXFA_FFDocView::AddIndexChangedSubform(CXFA_Node* pNode) {
- FXSYS_assert(pNode->GetClassID() == XFA_ELEMENT_Subform);
- m_IndexChangedSubforms.Add(pNode);
-}
-void CXFA_FFDocView::RunDocClose() {
- CXFA_Node* pRootItem =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
- if (!pRootItem) {
- return;
- }
- ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocClose);
-}
-void CXFA_FFDocView::DestroyDocView() {
- ClearInvalidateList();
- m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_None;
- m_iLock = 0;
- m_ValidateAccs.RemoveAll();
- m_bindItems.RemoveAll();
- m_CalculateAccs.RemoveAll();
-}
-FX_BOOL CXFA_FFDocView::IsStaticNotify() {
- return m_pDoc->GetDocType() == XFA_DOCTYPE_Static;
-}
-void CXFA_FFDocView::AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) {
- int32_t iAccs = m_CalculateAccs.GetSize();
- CXFA_WidgetAcc* pCurrentAcc =
- (iAccs < 1) ? (CXFA_WidgetAcc*)NULL
- : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1];
- if (pCurrentAcc != pWidgetAcc) {
- m_CalculateAccs.Add(pWidgetAcc);
- }
-}
-void CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) {
- CXFA_CalcData* pGlobalData =
- (CXFA_CalcData*)pNodeChange->GetUserData(XFA_CalcData);
- int32_t iCount = pGlobalData ? pGlobalData->m_Globals.GetSize() : 0;
- for (int32_t i = 0; i < iCount; i++) {
- CXFA_WidgetAcc* pResultAcc = (CXFA_WidgetAcc*)pGlobalData->m_Globals[i];
- if (pResultAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) {
- continue;
- }
- int32_t iAccs = m_CalculateAccs.GetSize();
- CXFA_WidgetAcc* pCurrentAcc =
- (iAccs < 1) ? (CXFA_WidgetAcc*)NULL
- : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1];
- if (pCurrentAcc != pResultAcc) {
- m_CalculateAccs.Add(pResultAcc);
- }
- }
-}
-void CXFA_FFDocView::RunCalculateRecursive(int32_t& iIndex) {
- while (iIndex < m_CalculateAccs.GetSize()) {
- CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[iIndex];
- AddCalculateNodeNotify(pCurAcc->GetNode());
- int32_t iRefCount =
- (int32_t)(uintptr_t)pCurAcc->GetNode()->GetUserData(XFA_CalcRefCount);
- iRefCount++;
- pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount,
- (void*)(uintptr_t)iRefCount);
- if (iRefCount > 11) {
- break;
- }
- if ((pCurAcc->ProcessCalculate()) == XFA_EVENTERROR_Sucess) {
- AddValidateWidget(pCurAcc);
- }
- iIndex++;
- RunCalculateRecursive(iIndex);
- }
-}
-int32_t CXFA_FFDocView::RunCalculateWidgets() {
- if (!m_pDoc->GetDocProvider()->IsCalculationsEnabled(m_pDoc)) {
- return XFA_EVENTERROR_Disabled;
- }
- int32_t iCounts = m_CalculateAccs.GetSize();
- int32_t iIndex = 0;
- if (iCounts > 0) {
- RunCalculateRecursive(iIndex);
- }
- for (int32_t i = 0; i < m_CalculateAccs.GetSize(); i++) {
- CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[i];
- pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount, (void*)(uintptr_t)0);
- }
- m_CalculateAccs.RemoveAll();
- return XFA_EVENTERROR_Sucess;
-}
-void CXFA_FFDocView::AddValidateWidget(CXFA_WidgetAcc* pWidget) {
- if (m_ValidateAccs.Find(pWidget) < 0) {
- m_ValidateAccs.Add(pWidget);
- }
-}
-FX_BOOL CXFA_FFDocView::InitCalculate(CXFA_Node* pNode) {
- ExecEventActivityByDeepFirst(pNode, XFA_EVENT_InitCalculate);
- return TRUE;
-}
-FX_BOOL CXFA_FFDocView::InitValidate(CXFA_Node* pNode) {
- if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) {
- return FALSE;
- }
- ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Validate);
- m_ValidateAccs.RemoveAll();
- return TRUE;
-}
-FX_BOOL CXFA_FFDocView::RunValidate() {
- if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) {
- return FALSE;
- }
- int32_t iCounts = m_ValidateAccs.GetSize();
- for (int32_t i = 0; i < iCounts; i++) {
- CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)m_ValidateAccs[i];
- if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) {
- continue;
- }
- pAcc->ProcessValidate();
- }
- m_ValidateAccs.RemoveAll();
- return TRUE;
-}
-FX_BOOL CXFA_FFDocView::RunEventLayoutReady() {
- CXFA_Node* pRootItem =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
- if (!pRootItem) {
- return FALSE;
- }
- ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready);
- RunLayout();
- return TRUE;
-}
-void CXFA_FFDocView::RunBindItems() {
- int32_t iCount = m_bindItems.GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- if (((CXFA_Node*)m_bindItems[i])->HasFlag(XFA_NODEFLAG_HasRemoved)) {
- continue;
- }
- CXFA_Node* pWidgetNode =
- ((CXFA_Node*)m_bindItems[i])->GetNodeItem(XFA_NODEITEM_Parent);
- CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pWidgetNode->GetWidgetData();
- if (!pAcc) {
- continue;
- }
- CXFA_BindItems binditems((CXFA_Node*)m_bindItems[i]);
- IXFA_ScriptContext* pScriptContext =
- pWidgetNode->GetDocument()->GetScriptContext();
- CFX_WideStringC wsRef;
- binditems.GetRef(wsRef);
- FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
- XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent |
- XFA_RESOLVENODE_ALL;
- XFA_RESOLVENODE_RS rs;
- pScriptContext->ResolveObjects(pWidgetNode, wsRef, rs, dwStyle);
- int32_t iCount = rs.nodes.GetSize();
- pAcc->DeleteItem(-1);
- if (rs.dwFlags != XFA_RESOVENODE_RSTYPE_Nodes || iCount < 1) {
- continue;
- }
- CFX_WideStringC wsValueRef, wsLabelRef;
- binditems.GetValueRef(wsValueRef);
- binditems.GetLabelRef(wsLabelRef);
- FX_BOOL bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef;
- FX_BOOL bLabelUseContent =
- wsLabelRef.IsEmpty() || wsLabelRef == FX_WSTRC(L"$");
- FX_BOOL bValueUseContent =
- wsValueRef.IsEmpty() || wsValueRef == FX_WSTRC(L"$");
- CFX_WideString wsValue, wsLabel;
- FX_DWORD uValueHash = FX_HashCode_String_GetW(CFX_WideString(wsValueRef),
- wsValueRef.GetLength());
- for (int32_t i = 0; i < iCount; i++) {
- CXFA_Object* refObj = rs.nodes[i];
- if (!refObj->IsNode()) {
- continue;
- }
- CXFA_Node* refNode = (CXFA_Node*)refObj;
- if (bValueUseContent) {
- wsValue = refNode->GetContent();
- } else {
- CXFA_Node* nodeValue = refNode->GetFirstChildByName(uValueHash);
- if (nodeValue == NULL) {
- wsValue = refNode->GetContent();
- } else {
- wsValue = nodeValue->GetContent();
- }
- }
- if (!bUseValue) {
- if (bLabelUseContent) {
- wsLabel = refNode->GetContent();
- } else {
- CXFA_Node* nodeLabel = refNode->GetFirstChildByName(wsLabelRef);
- if (nodeLabel != NULL) {
- wsLabel = nodeLabel->GetContent();
- }
- }
- } else {
- wsLabel = wsValue;
- }
- pAcc->InsertItem(wsLabel, wsValue);
- }
- }
- m_bindItems.RemoveAll();
-}
-void CXFA_FFDocView::SetChangeMark() {
- if (m_iStatus < XFA_DOCVIEW_LAYOUTSTATUS_End) {
- return;
- }
- m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
-}
-CXFA_Node* CXFA_FFDocView::GetRootSubform() {
- CXFA_Node* pFormPacketNode =
- (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
- if (!pFormPacketNode) {
- return NULL;
- }
- return pFormPacketNode->GetFirstChildByClass(XFA_ELEMENT_Subform);
-}
-CXFA_FFDocWidgetIterator::CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView,
- CXFA_Node* pTravelRoot)
- : m_ContentIterator(pTravelRoot) {
- m_pDocView = pDocView;
- m_pCurWidget = NULL;
-}
-CXFA_FFDocWidgetIterator::~CXFA_FFDocWidgetIterator() {}
-void CXFA_FFDocWidgetIterator::Reset() {
- m_ContentIterator.Reset();
- m_pCurWidget = NULL;
-}
-IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToFirst() {
- return NULL;
-}
-IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToLast() {
- return NULL;
-}
-IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToNext() {
- CXFA_Node* pItem = m_pCurWidget ? m_ContentIterator.MoveToNext()
- : m_ContentIterator.GetCurrent();
- while (pItem) {
- if (CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pItem->GetWidgetData()) {
- while ((m_pCurWidget = pAcc->GetNextWidget(NULL)) != NULL) {
- if (!m_pCurWidget->IsLoaded() &&
- (m_pCurWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
- m_pCurWidget->LoadWidget();
- }
- return m_pCurWidget;
- }
- }
- pItem = m_ContentIterator.MoveToNext();
- }
- return NULL;
-}
-IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToPrevious() {
- return NULL;
-}
-IXFA_Widget* CXFA_FFDocWidgetIterator::GetCurrentWidget() {
- return NULL;
-}
-FX_BOOL CXFA_FFDocWidgetIterator::SetCurrentWidget(IXFA_Widget* hWidget) {
- return FALSE;
-}
-IXFA_WidgetAccIterator* XFA_WidgetAccIterator_Create(
- CXFA_WidgetAcc* pTravelRoot,
- XFA_WIDGETORDER eOrder) {
- if (!pTravelRoot) {
- return NULL;
- }
- return new CXFA_WidgetAccIterator(pTravelRoot->GetDocView(),
- pTravelRoot->GetNode());
-}
-CXFA_WidgetAccIterator::CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView,
- CXFA_Node* pTravelRoot)
- : m_ContentIterator(pTravelRoot) {
- m_pDocView = pDocView;
- m_pCurWidgetAcc = NULL;
-}
-CXFA_WidgetAccIterator::~CXFA_WidgetAccIterator() {}
-void CXFA_WidgetAccIterator::Reset() {
- m_pCurWidgetAcc = NULL;
- m_ContentIterator.Reset();
-}
-CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToFirst() {
- return NULL;
-}
-CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToLast() {
- return NULL;
-}
-CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToNext() {
- CXFA_Node* pItem = m_pCurWidgetAcc ? m_ContentIterator.MoveToNext()
- : m_ContentIterator.GetCurrent();
- while (pItem) {
- if ((m_pCurWidgetAcc = (CXFA_WidgetAcc*)pItem->GetWidgetData()) != NULL) {
- return m_pCurWidgetAcc;
- }
- pItem = m_ContentIterator.MoveToNext();
- }
- return NULL;
-}
-CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToPrevious() {
- return NULL;
-}
-CXFA_WidgetAcc* CXFA_WidgetAccIterator::GetCurrentWidgetAcc() {
- return NULL;
-}
-FX_BOOL CXFA_WidgetAccIterator::SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget) {
- return FALSE;
-}
-void CXFA_WidgetAccIterator::SkipTree() {
- m_ContentIterator.SkipChildrenAndMoveToNext();
- m_pCurWidgetAcc = NULL;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffwidgethandler.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpushbutton.h"
+#include "xfa_ffcheckbutton.h"
+#include "xfa_ffchoicelist.h"
+#include "xfa_ffimageedit.h"
+#include "xfa_fftextedit.h"
+#include "xfa_ffbarcode.h"
+#include "xfa_ffdraw.h"
+#include "xfa_fftext.h"
+#include "xfa_ffpath.h"
+#include "xfa_ffimage.h"
+#include "xfa_ffexclgroup.h"
+#include "xfa_ffsubform.h"
+#include "xfa_ffsignature.h"
+#include "xfa_ffapp.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffwidgetacc.h"
+extern const XFA_ATTRIBUTEENUM gs_EventActivity[] = {
+ XFA_ATTRIBUTEENUM_Click, XFA_ATTRIBUTEENUM_Change,
+ XFA_ATTRIBUTEENUM_DocClose, XFA_ATTRIBUTEENUM_DocReady,
+ XFA_ATTRIBUTEENUM_Enter, XFA_ATTRIBUTEENUM_Exit,
+ XFA_ATTRIBUTEENUM_Full, XFA_ATTRIBUTEENUM_IndexChange,
+ XFA_ATTRIBUTEENUM_Initialize, XFA_ATTRIBUTEENUM_MouseDown,
+ XFA_ATTRIBUTEENUM_MouseEnter, XFA_ATTRIBUTEENUM_MouseExit,
+ XFA_ATTRIBUTEENUM_MouseUp, XFA_ATTRIBUTEENUM_PostExecute,
+ XFA_ATTRIBUTEENUM_PostOpen, XFA_ATTRIBUTEENUM_PostPrint,
+ XFA_ATTRIBUTEENUM_PostSave, XFA_ATTRIBUTEENUM_PostSign,
+ XFA_ATTRIBUTEENUM_PostSubmit, XFA_ATTRIBUTEENUM_PreExecute,
+ XFA_ATTRIBUTEENUM_PreOpen, XFA_ATTRIBUTEENUM_PrePrint,
+ XFA_ATTRIBUTEENUM_PreSave, XFA_ATTRIBUTEENUM_PreSign,
+ XFA_ATTRIBUTEENUM_PreSubmit, XFA_ATTRIBUTEENUM_Ready,
+ XFA_ATTRIBUTEENUM_Unknown,
+};
+CXFA_FFDocView::CXFA_FFDocView(CXFA_FFDoc* pDoc)
+ : m_bLayoutEvent(FALSE),
+ m_pListFocusWidget(nullptr),
+ m_bInLayoutStatus(FALSE),
+ m_pDoc(pDoc),
+ m_pWidgetHandler(nullptr),
+ m_pXFADocLayout(nullptr),
+ m_pFocusAcc(nullptr),
+ m_pFocusWidget(nullptr),
+ m_pOldFocusWidget(nullptr),
+ m_iStatus(XFA_DOCVIEW_LAYOUTSTATUS_None),
+ m_iLock(0) {
+}
+CXFA_FFDocView::~CXFA_FFDocView() {
+ DestroyDocView();
+ if (m_pWidgetHandler) {
+ delete m_pWidgetHandler;
+ }
+ m_pWidgetHandler = NULL;
+}
+void CXFA_FFDocView::InitLayout(CXFA_Node* pNode) {
+ RunBindItems();
+ ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Initialize);
+ ExecEventActivityByDeepFirst(pNode, XFA_EVENT_IndexChange);
+}
+int32_t CXFA_FFDocView::StartLayout(int32_t iStartPage) {
+ m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start;
+ m_pDoc->GetXFADoc()->DoProtoMerge();
+ m_pDoc->GetXFADoc()->DoDataMerge();
+ m_pXFADocLayout = GetXFALayout();
+ int32_t iStatus = m_pXFADocLayout->StartLayout();
+ if (iStatus < 0) {
+ return iStatus;
+ }
+ CXFA_Node* pRootItem =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
+ if (!pRootItem) {
+ return iStatus;
+ }
+ InitLayout(pRootItem);
+ InitCalculate(pRootItem);
+ InitValidate(pRootItem);
+ ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, TRUE);
+ m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start;
+ return iStatus;
+}
+int32_t CXFA_FFDocView::DoLayout(IFX_Pause* pPause) {
+ int32_t iStatus = 100;
+ iStatus = m_pXFADocLayout->DoLayout(pPause);
+ if (iStatus != 100) {
+ return iStatus;
+ }
+ m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Doing;
+ return iStatus;
+}
+void CXFA_FFDocView::StopLayout() {
+ CXFA_Node* pRootItem =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
+ if (!pRootItem) {
+ return;
+ }
+ CXFA_Node* pSubformNode = pRootItem->GetChild(0, XFA_ELEMENT_Subform);
+ if (!pSubformNode) {
+ return;
+ }
+ CXFA_Node* pPageSetNode =
+ pSubformNode->GetFirstChildByClass(XFA_ELEMENT_PageSet);
+ if (!pPageSetNode) {
+ return;
+ }
+ RunCalculateWidgets();
+ RunValidate();
+ InitLayout(pPageSetNode);
+ InitCalculate(pPageSetNode);
+ InitValidate(pPageSetNode);
+ ExecEventActivityByDeepFirst(pPageSetNode, XFA_EVENT_Ready, TRUE);
+ ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready);
+ ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocReady);
+ RunCalculateWidgets();
+ RunValidate();
+ if (RunLayout()) {
+ ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready);
+ }
+ m_CalculateAccs.RemoveAll();
+ if (m_pFocusAcc && !m_pFocusWidget) {
+ SetFocusWidgetAcc(m_pFocusAcc);
+ }
+ m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_End;
+}
+int32_t CXFA_FFDocView::GetLayoutStatus() {
+ return m_iStatus;
+}
+void CXFA_FFDocView::ShowNullTestMsg() {
+ int32_t iCount = m_arrNullTestMsg.GetSize();
+ CXFA_FFApp* pApp = m_pDoc->GetApp();
+ IXFA_AppProvider* pAppProvider = pApp->GetAppProvider();
+ if (pAppProvider && iCount) {
+ int32_t iRemain = iCount > 7 ? iCount - 7 : 0;
+ iCount -= iRemain;
+ CFX_WideString wsMsg;
+ for (int32_t i = 0; i < iCount; i++) {
+ wsMsg += m_arrNullTestMsg[i] + FX_WSTRC(L"\n");
+ }
+ if (iRemain > 0) {
+ CFX_WideString wsLimit;
+ pAppProvider->LoadString(XFA_IDS_ValidateLimit, wsLimit);
+ if (!wsLimit.IsEmpty()) {
+ CFX_WideString wsTemp;
+ wsTemp.Format((const FX_WCHAR*)wsLimit, iRemain);
+ wsMsg += FX_WSTRC(L"\n") + wsTemp;
+ }
+ }
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
+ pAppProvider->MsgBox(wsMsg, wsTitle, XFA_MBICON_Status, XFA_MB_OK);
+ }
+ m_arrNullTestMsg.RemoveAll();
+}
+void CXFA_FFDocView::UpdateDocView() {
+ if (IsUpdateLocked()) {
+ return;
+ }
+ LockUpdate();
+ int32_t iNewAdds = m_NewAddedNodes.GetSize();
+ for (int32_t i = 0; i < iNewAdds; i++) {
+ CXFA_Node* pNode = (CXFA_Node*)m_NewAddedNodes[i];
+ InitCalculate(pNode);
+ InitValidate(pNode);
+ ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, TRUE);
+ }
+ m_NewAddedNodes.RemoveAll();
+ this->RunSubformIndexChange();
+ this->RunCalculateWidgets();
+ this->RunValidate();
+ ShowNullTestMsg();
+ m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Next;
+ if (RunLayout() && m_bLayoutEvent) {
+ RunEventLayoutReady();
+ }
+ m_bLayoutEvent = FALSE;
+ m_CalculateAccs.RemoveAll();
+ this->RunInvalidate();
+ UnlockUpdate();
+}
+int32_t CXFA_FFDocView::CountPageViews() {
+ if (!m_pXFADocLayout) {
+ return 0;
+ }
+ return m_pXFADocLayout->CountPages();
+}
+IXFA_PageView* CXFA_FFDocView::GetPageView(int32_t nIndex) {
+ if (!m_pXFADocLayout) {
+ return NULL;
+ }
+ return static_cast<CXFA_FFPageView*>(m_pXFADocLayout->GetPage(nIndex));
+}
+IXFA_Widget* CXFA_FFDocView::GetWidgetByName(const CFX_WideStringC& wsName) {
+ return GetWidgetByName(wsName, NULL);
+}
+CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName(
+ const CFX_WideStringC& wsName) {
+ return GetWidgetAccByName(wsName, NULL);
+}
+IXFA_DocLayout* CXFA_FFDocView::GetXFALayout() const {
+ return m_pDoc->GetXFADoc()->GetDocLayout();
+}
+FX_BOOL CXFA_FFDocView::ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc) {
+ CXFA_Node* pNode = pWidgetAcc->GetNode();
+ XFA_ELEMENT eType = pNode->GetClassID();
+ if (eType != XFA_ELEMENT_Field && eType != XFA_ELEMENT_ExclGroup) {
+ return FALSE;
+ }
+ FX_BOOL bNotify = IsStaticNotify();
+ pWidgetAcc->ResetData();
+ pWidgetAcc->UpdateUIDisplay();
+ if (bNotify) {
+ pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, NULL,
+ NULL);
+ }
+ if (CXFA_Validate validate = pWidgetAcc->GetValidate()) {
+ AddValidateWidget(pWidgetAcc);
+ ((CXFA_Node*)validate)->SetFlag(XFA_NODEFLAG_NeedsInitApp, TRUE, FALSE);
+ }
+ return TRUE;
+}
+void CXFA_FFDocView::ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc) {
+ m_bLayoutEvent = TRUE;
+ FX_BOOL bChanged = FALSE;
+ CXFA_Node* pFormNode = NULL;
+ if (pWidgetAcc) {
+ bChanged = ResetSingleWidgetAccData(pWidgetAcc);
+ pFormNode = pWidgetAcc->GetNode();
+ } else {
+ pFormNode = GetRootSubform();
+ }
+ if (!pFormNode) {
+ return;
+ }
+ if (pFormNode->GetClassID() != XFA_ELEMENT_Field &&
+ pFormNode->GetClassID() != XFA_ELEMENT_ExclGroup) {
+ CXFA_WidgetAccIterator Iterator(this, pFormNode);
+ while (CXFA_WidgetAcc* pAcc = Iterator.MoveToNext()) {
+ bChanged |= ResetSingleWidgetAccData(pAcc);
+ if (pAcc->GetNode()->GetClassID() == XFA_ELEMENT_ExclGroup) {
+ Iterator.SkipTree();
+ }
+ }
+ }
+ if (bChanged) {
+ m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
+ }
+}
+int32_t CXFA_FFDocView::ProcessWidgetEvent(CXFA_EventParam* pParam,
+ CXFA_WidgetAcc* pWidgetAcc) {
+ if (pParam == NULL) {
+ return XFA_EVENTERROR_Error;
+ }
+ if (pParam->m_eType == XFA_EVENT_Validate) {
+ CFX_WideString wsValidateStr = FX_WSTRC(L"preSubmit");
+ CXFA_Node* pConfigItem =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Config);
+ if (pConfigItem) {
+ CXFA_Node* pValidateNode = NULL;
+ CXFA_Node* pAcrobatNode = pConfigItem->GetChild(0, XFA_ELEMENT_Acrobat);
+ pValidateNode =
+ pAcrobatNode ? pAcrobatNode->GetChild(0, XFA_ELEMENT_Validate) : NULL;
+ if (!pValidateNode) {
+ CXFA_Node* pPresentNode = pConfigItem->GetChild(0, XFA_ELEMENT_Present);
+ pValidateNode = pPresentNode
+ ? pPresentNode->GetChild(0, XFA_ELEMENT_Validate)
+ : NULL;
+ }
+ if (pValidateNode) {
+ wsValidateStr = pValidateNode->GetContent();
+ }
+ }
+ FX_BOOL bValidate = FALSE;
+ switch (pParam->m_iValidateActivities) {
+ case XFA_VALIDATE_preSubmit:
+ bValidate = wsValidateStr.Find(L"preSubmit") != -1;
+ break;
+ case XFA_VALIDATE_prePrint:
+ bValidate = wsValidateStr.Find(L"prePrint") != -1;
+ break;
+ case XFA_VALIDATE_preExecute:
+ bValidate = wsValidateStr.Find(L"preExecute") != -1;
+ break;
+ case XFA_VALIDATE_preSave:
+ bValidate = wsValidateStr.Find(L"preSave") != -1;
+ break;
+ }
+ if (!bValidate) {
+ return XFA_EVENTERROR_Sucess;
+ }
+ }
+ CXFA_Node* pNode = pWidgetAcc ? pWidgetAcc->GetNode() : NULL;
+ if (!pNode) {
+ CXFA_Node* pRootItem =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
+ if (!pRootItem) {
+ return XFA_EVENTERROR_Error;
+ }
+ pNode = pRootItem->GetChild(0, XFA_ELEMENT_Subform);
+ }
+ ExecEventActivityByDeepFirst(pNode, pParam->m_eType, pParam->m_bIsFormReady);
+ return XFA_EVENTERROR_Sucess;
+}
+IXFA_WidgetHandler* CXFA_FFDocView::GetWidgetHandler() {
+ if (!m_pWidgetHandler) {
+ m_pWidgetHandler = new CXFA_FFWidgetHandler(this);
+ }
+ return m_pWidgetHandler;
+}
+IXFA_WidgetIterator* CXFA_FFDocView::CreateWidgetIterator() {
+ CXFA_Node* pFormRoot = GetRootSubform();
+ if (!pFormRoot) {
+ return NULL;
+ }
+ return new CXFA_FFDocWidgetIterator(this, pFormRoot);
+}
+IXFA_WidgetAccIterator* CXFA_FFDocView::CreateWidgetAccIterator(
+ XFA_WIDGETORDER eOrder) {
+ CXFA_Node* pFormRoot = GetRootSubform();
+ if (!pFormRoot) {
+ return NULL;
+ }
+ return new CXFA_WidgetAccIterator(this, pFormRoot);
+}
+IXFA_Widget* CXFA_FFDocView::GetFocusWidget() {
+ return m_pFocusWidget;
+}
+void CXFA_FFDocView::KillFocus() {
+ if (m_pFocusWidget &&
+ (m_pFocusWidget->GetStatus() & XFA_WIDGETSTATUS_Focused)) {
+ (m_pFocusWidget)->OnKillFocus(NULL);
+ }
+ m_pFocusAcc = NULL;
+ m_pFocusWidget = NULL;
+ m_pOldFocusWidget = NULL;
+}
+FX_BOOL CXFA_FFDocView::SetFocus(IXFA_Widget* hWidget) {
+ CXFA_FFWidget* pNewFocus = (CXFA_FFWidget*)hWidget;
+ if (m_pOldFocusWidget == pNewFocus) {
+ return FALSE;
+ }
+ CXFA_FFWidget* pOldFocus = m_pOldFocusWidget;
+ m_pOldFocusWidget = pNewFocus;
+ if (pOldFocus) {
+ if (m_pFocusWidget != m_pOldFocusWidget &&
+ (pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Focused)) {
+ m_pFocusWidget = pOldFocus;
+ pOldFocus->OnKillFocus(pNewFocus);
+ } else if ((pOldFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
+ if (!pOldFocus->IsLoaded()) {
+ pOldFocus->LoadWidget();
+ }
+ pOldFocus->OnSetFocus(m_pFocusWidget);
+ m_pFocusWidget = pOldFocus;
+ pOldFocus->OnKillFocus(pNewFocus);
+ }
+ }
+ if (m_pFocusWidget == m_pOldFocusWidget) {
+ return FALSE;
+ }
+ pNewFocus = m_pOldFocusWidget;
+ if (m_pListFocusWidget && pNewFocus == m_pListFocusWidget) {
+ m_pFocusAcc = NULL;
+ m_pFocusWidget = NULL;
+ m_pListFocusWidget = NULL;
+ m_pOldFocusWidget = NULL;
+ return FALSE;
+ }
+ if (pNewFocus && (pNewFocus->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
+ if (!pNewFocus->IsLoaded()) {
+ pNewFocus->LoadWidget();
+ }
+ pNewFocus->OnSetFocus(m_pFocusWidget);
+ }
+ m_pFocusAcc = pNewFocus ? pNewFocus->GetDataAcc() : NULL;
+ m_pFocusWidget = pNewFocus;
+ m_pOldFocusWidget = m_pFocusWidget;
+ return TRUE;
+}
+CXFA_WidgetAcc* CXFA_FFDocView::GetFocusWidgetAcc() {
+ return m_pFocusAcc;
+}
+void CXFA_FFDocView::SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) {
+ CXFA_FFWidget* pNewFocus =
+ pWidgetAcc ? pWidgetAcc->GetNextWidget(NULL) : NULL;
+ if (SetFocus(pNewFocus)) {
+ m_pFocusAcc = pWidgetAcc;
+ if (m_iStatus >= XFA_DOCVIEW_LAYOUTSTATUS_End) {
+ m_pDoc->GetDocProvider()->SetFocusWidget(m_pDoc, m_pFocusWidget);
+ }
+ }
+}
+void CXFA_FFDocView::DeleteLayoutItem(CXFA_FFWidget* pWidget) {
+ if (m_pFocusAcc == pWidget->GetDataAcc()) {
+ m_pFocusAcc = NULL;
+ m_pFocusWidget = NULL;
+ m_pOldFocusWidget = NULL;
+ }
+}
+static int32_t XFA_ProcessEvent(CXFA_FFDocView* pDocView,
+ CXFA_WidgetAcc* pWidgetAcc,
+ CXFA_EventParam* pParam) {
+ if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ switch (pParam->m_eType) {
+ case XFA_EVENT_Calculate:
+ return pWidgetAcc->ProcessCalculate();
+ case XFA_EVENT_Validate:
+ if (((CXFA_FFDoc*)pDocView->GetDoc())
+ ->GetDocProvider()
+ ->IsValidationsEnabled(pDocView->GetDoc())) {
+ return pWidgetAcc->ProcessValidate(0x01);
+ }
+ return XFA_EVENTERROR_Disabled;
+ case XFA_EVENT_InitCalculate: {
+ CXFA_Calculate calc = pWidgetAcc->GetCalculate();
+ if (!calc) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return XFA_EVENTERROR_Disabled;
+ }
+ CXFA_Script script = calc.GetScript();
+ return pWidgetAcc->ExecuteScript(script, pParam);
+ }
+ default:
+ break;
+ }
+ int32_t iRet =
+ pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam);
+ return iRet;
+}
+int32_t CXFA_FFDocView::ExecEventActivityByDeepFirst(CXFA_Node* pFormNode,
+ XFA_EVENTTYPE eEventType,
+ FX_BOOL bIsFormReady,
+ FX_BOOL bRecursive,
+ CXFA_Node* pExclude) {
+ int32_t iRet = XFA_EVENTERROR_NotExist;
+ if (pFormNode == pExclude) {
+ return iRet;
+ }
+ XFA_ELEMENT elementType = pFormNode->GetClassID();
+ if (elementType == XFA_ELEMENT_Field) {
+ if (eEventType == XFA_EVENT_IndexChange) {
+ return iRet;
+ }
+ CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pFormNode->GetWidgetData();
+ if (pWidgetAcc == NULL) {
+ return iRet;
+ }
+ CXFA_EventParam eParam;
+ eParam.m_eType = eEventType;
+ eParam.m_pTarget = pWidgetAcc;
+ eParam.m_bIsFormReady = bIsFormReady;
+ return XFA_ProcessEvent(this, pWidgetAcc, &eParam);
+ }
+ if (bRecursive) {
+ for (CXFA_Node* pNode = pFormNode->GetNodeItem(
+ XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode);
+ pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling,
+ XFA_OBJECTTYPE_ContainerNode)) {
+ elementType = pNode->GetClassID();
+ if (elementType != XFA_ELEMENT_Variables &&
+ elementType != XFA_ELEMENT_Draw) {
+ iRet |= ExecEventActivityByDeepFirst(pNode, eEventType, bIsFormReady,
+ bRecursive, pExclude);
+ }
+ }
+ }
+ CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pFormNode->GetWidgetData();
+ if (pWidgetAcc == NULL) {
+ return iRet;
+ }
+ CXFA_EventParam eParam;
+ eParam.m_eType = eEventType;
+ eParam.m_pTarget = pWidgetAcc;
+ eParam.m_bIsFormReady = bIsFormReady;
+ iRet |= XFA_ProcessEvent(this, pWidgetAcc, &eParam);
+ return iRet;
+}
+CXFA_FFWidget* CXFA_FFDocView::GetWidgetByName(const CFX_WideStringC& wsName,
+ CXFA_FFWidget* pRefWidget) {
+ CXFA_WidgetAcc* pRefAcc = pRefWidget ? pRefWidget->GetDataAcc() : NULL;
+ if (CXFA_WidgetAcc* pAcc = GetWidgetAccByName(wsName, pRefAcc)) {
+ return pAcc->GetNextWidget(NULL);
+ }
+ return NULL;
+}
+CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName(
+ const CFX_WideStringC& wsName,
+ CXFA_WidgetAcc* pRefWidgetAcc) {
+ CFX_WideString wsExpression;
+ FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
+ XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent;
+ IXFA_ScriptContext* pScriptContext = m_pDoc->GetXFADoc()->GetScriptContext();
+ if (!pScriptContext) {
+ return NULL;
+ }
+ CXFA_Node* refNode = NULL;
+ if (pRefWidgetAcc != NULL) {
+ refNode = pRefWidgetAcc->GetNode();
+ wsExpression = wsName;
+ } else {
+ wsExpression = L"$form." + wsName;
+ }
+ XFA_RESOLVENODE_RS resoveNodeRS;
+ int32_t iRet = pScriptContext->ResolveObjects(refNode, wsExpression,
+ resoveNodeRS, dwStyle);
+ if (iRet < 1) {
+ return NULL;
+ }
+ if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
+ CXFA_Object* pNode = resoveNodeRS.nodes[0];
+ if (pNode->IsNode()) {
+ return (CXFA_WidgetAcc*)((CXFA_Node*)pNode)->GetWidgetData();
+ }
+ }
+ return NULL;
+}
+void CXFA_FFDocView::OnPageEvent(IXFA_LayoutPage* pSender,
+ XFA_PAGEEVENT eEvent,
+ int32_t iPageIndex) {
+ FX_BOOL bNofify = m_iStatus >= XFA_DOCVIEW_LAYOUTSTATUS_End;
+ CXFA_FFPageView* pFFPageView = static_cast<CXFA_FFPageView*>(pSender);
+ if (eEvent == XFA_PAGEEVENT_PageRemoved) {
+ if (bNofify) {
+ m_pDoc->GetDocProvider()->PageViewEvent(pFFPageView,
+ XFA_PAGEVIEWEVENT_PostRemoved);
+ }
+ } else if (eEvent == XFA_PAGEEVENT_PageAdded) {
+ if (bNofify) {
+ m_pDoc->GetDocProvider()->PageViewEvent(pFFPageView,
+ XFA_PAGEVIEWEVENT_PostAdded);
+ pFFPageView->LoadPageView();
+ }
+ }
+}
+void CXFA_FFDocView::LockUpdate() {
+ m_iLock++;
+}
+void CXFA_FFDocView::UnlockUpdate() {
+ m_iLock--;
+}
+FX_BOOL CXFA_FFDocView::IsUpdateLocked() {
+ return m_iLock;
+}
+void CXFA_FFDocView::ClearInvalidateList() {
+ FX_POSITION ps = m_mapPageInvalidate.GetStartPosition();
+ while (ps) {
+ void* pPageView = NULL;
+ CFX_RectF* pRect = NULL;
+ m_mapPageInvalidate.GetNextAssoc(ps, pPageView, (void*&)pRect);
+ delete pRect;
+ }
+ m_mapPageInvalidate.RemoveAll();
+}
+void CXFA_FFDocView::AddInvalidateRect(CXFA_FFWidget* pWidget,
+ const CFX_RectF& rtInvalidate) {
+ AddInvalidateRect(pWidget->GetPageView(), rtInvalidate);
+}
+void CXFA_FFDocView::AddInvalidateRect(IXFA_PageView* pPageView,
+ const CFX_RectF& rtInvalidate) {
+ CFX_RectF* pRect = (CFX_RectF*)m_mapPageInvalidate.GetValueAt(pPageView);
+ if (!pRect) {
+ pRect = new CFX_RectF;
+ pRect->Set(rtInvalidate.left, rtInvalidate.top, rtInvalidate.width,
+ rtInvalidate.height);
+ m_mapPageInvalidate.SetAt(pPageView, pRect);
+ } else {
+ pRect->Union(rtInvalidate);
+ }
+}
+void CXFA_FFDocView::RunInvalidate() {
+ FX_POSITION ps = m_mapPageInvalidate.GetStartPosition();
+ while (ps) {
+ IXFA_PageView* pPageView = NULL;
+ CFX_RectF* pRect = NULL;
+ m_mapPageInvalidate.GetNextAssoc(ps, (void*&)pPageView, (void*&)pRect);
+ m_pDoc->GetDocProvider()->InvalidateRect(pPageView, *pRect);
+ delete pRect;
+ }
+ m_mapPageInvalidate.RemoveAll();
+}
+FX_BOOL CXFA_FFDocView::RunLayout() {
+ LockUpdate();
+ m_bInLayoutStatus = TRUE;
+ if (!m_pXFADocLayout->IncrementLayout() &&
+ m_pXFADocLayout->StartLayout() < 100) {
+ m_pXFADocLayout->DoLayout();
+ UnlockUpdate();
+ m_bInLayoutStatus = FALSE;
+ return TRUE;
+ }
+ m_bInLayoutStatus = FALSE;
+ UnlockUpdate();
+ return FALSE;
+}
+void CXFA_FFDocView::RunSubformIndexChange() {
+ int32_t iSubforms = m_IndexChangedSubforms.GetSize();
+ for (int32_t i = 0; i < iSubforms; i++) {
+ CXFA_Node* pSubformNode = (CXFA_Node*)m_IndexChangedSubforms[i];
+ CXFA_WidgetAcc* pWidgetAcc = (CXFA_WidgetAcc*)pSubformNode->GetWidgetData();
+ if (!pWidgetAcc) {
+ continue;
+ }
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_IndexChange;
+ eParam.m_pTarget = pWidgetAcc;
+ pWidgetAcc->ProcessEvent(XFA_ATTRIBUTEENUM_IndexChange, &eParam);
+ }
+ m_IndexChangedSubforms.RemoveAll();
+}
+void CXFA_FFDocView::AddNewFormNode(CXFA_Node* pNode) {
+ m_NewAddedNodes.Add(pNode);
+ this->InitLayout(pNode);
+}
+void CXFA_FFDocView::AddIndexChangedSubform(CXFA_Node* pNode) {
+ FXSYS_assert(pNode->GetClassID() == XFA_ELEMENT_Subform);
+ m_IndexChangedSubforms.Add(pNode);
+}
+void CXFA_FFDocView::RunDocClose() {
+ CXFA_Node* pRootItem =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
+ if (!pRootItem) {
+ return;
+ }
+ ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocClose);
+}
+void CXFA_FFDocView::DestroyDocView() {
+ ClearInvalidateList();
+ m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_None;
+ m_iLock = 0;
+ m_ValidateAccs.RemoveAll();
+ m_bindItems.RemoveAll();
+ m_CalculateAccs.RemoveAll();
+}
+FX_BOOL CXFA_FFDocView::IsStaticNotify() {
+ return m_pDoc->GetDocType() == XFA_DOCTYPE_Static;
+}
+void CXFA_FFDocView::AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) {
+ int32_t iAccs = m_CalculateAccs.GetSize();
+ CXFA_WidgetAcc* pCurrentAcc =
+ (iAccs < 1) ? (CXFA_WidgetAcc*)NULL
+ : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1];
+ if (pCurrentAcc != pWidgetAcc) {
+ m_CalculateAccs.Add(pWidgetAcc);
+ }
+}
+void CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) {
+ CXFA_CalcData* pGlobalData =
+ (CXFA_CalcData*)pNodeChange->GetUserData(XFA_CalcData);
+ int32_t iCount = pGlobalData ? pGlobalData->m_Globals.GetSize() : 0;
+ for (int32_t i = 0; i < iCount; i++) {
+ CXFA_WidgetAcc* pResultAcc = (CXFA_WidgetAcc*)pGlobalData->m_Globals[i];
+ if (pResultAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) {
+ continue;
+ }
+ int32_t iAccs = m_CalculateAccs.GetSize();
+ CXFA_WidgetAcc* pCurrentAcc =
+ (iAccs < 1) ? (CXFA_WidgetAcc*)NULL
+ : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1];
+ if (pCurrentAcc != pResultAcc) {
+ m_CalculateAccs.Add(pResultAcc);
+ }
+ }
+}
+void CXFA_FFDocView::RunCalculateRecursive(int32_t& iIndex) {
+ while (iIndex < m_CalculateAccs.GetSize()) {
+ CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[iIndex];
+ AddCalculateNodeNotify(pCurAcc->GetNode());
+ int32_t iRefCount =
+ (int32_t)(uintptr_t)pCurAcc->GetNode()->GetUserData(XFA_CalcRefCount);
+ iRefCount++;
+ pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount,
+ (void*)(uintptr_t)iRefCount);
+ if (iRefCount > 11) {
+ break;
+ }
+ if ((pCurAcc->ProcessCalculate()) == XFA_EVENTERROR_Sucess) {
+ AddValidateWidget(pCurAcc);
+ }
+ iIndex++;
+ RunCalculateRecursive(iIndex);
+ }
+}
+int32_t CXFA_FFDocView::RunCalculateWidgets() {
+ if (!m_pDoc->GetDocProvider()->IsCalculationsEnabled(m_pDoc)) {
+ return XFA_EVENTERROR_Disabled;
+ }
+ int32_t iCounts = m_CalculateAccs.GetSize();
+ int32_t iIndex = 0;
+ if (iCounts > 0) {
+ RunCalculateRecursive(iIndex);
+ }
+ for (int32_t i = 0; i < m_CalculateAccs.GetSize(); i++) {
+ CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[i];
+ pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount, (void*)(uintptr_t)0);
+ }
+ m_CalculateAccs.RemoveAll();
+ return XFA_EVENTERROR_Sucess;
+}
+void CXFA_FFDocView::AddValidateWidget(CXFA_WidgetAcc* pWidget) {
+ if (m_ValidateAccs.Find(pWidget) < 0) {
+ m_ValidateAccs.Add(pWidget);
+ }
+}
+FX_BOOL CXFA_FFDocView::InitCalculate(CXFA_Node* pNode) {
+ ExecEventActivityByDeepFirst(pNode, XFA_EVENT_InitCalculate);
+ return TRUE;
+}
+FX_BOOL CXFA_FFDocView::InitValidate(CXFA_Node* pNode) {
+ if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) {
+ return FALSE;
+ }
+ ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Validate);
+ m_ValidateAccs.RemoveAll();
+ return TRUE;
+}
+FX_BOOL CXFA_FFDocView::RunValidate() {
+ if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) {
+ return FALSE;
+ }
+ int32_t iCounts = m_ValidateAccs.GetSize();
+ for (int32_t i = 0; i < iCounts; i++) {
+ CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)m_ValidateAccs[i];
+ if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) {
+ continue;
+ }
+ pAcc->ProcessValidate();
+ }
+ m_ValidateAccs.RemoveAll();
+ return TRUE;
+}
+FX_BOOL CXFA_FFDocView::RunEventLayoutReady() {
+ CXFA_Node* pRootItem =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
+ if (!pRootItem) {
+ return FALSE;
+ }
+ ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready);
+ RunLayout();
+ return TRUE;
+}
+void CXFA_FFDocView::RunBindItems() {
+ int32_t iCount = m_bindItems.GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ if (((CXFA_Node*)m_bindItems[i])->HasFlag(XFA_NODEFLAG_HasRemoved)) {
+ continue;
+ }
+ CXFA_Node* pWidgetNode =
+ ((CXFA_Node*)m_bindItems[i])->GetNodeItem(XFA_NODEITEM_Parent);
+ CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pWidgetNode->GetWidgetData();
+ if (!pAcc) {
+ continue;
+ }
+ CXFA_BindItems binditems((CXFA_Node*)m_bindItems[i]);
+ IXFA_ScriptContext* pScriptContext =
+ pWidgetNode->GetDocument()->GetScriptContext();
+ CFX_WideStringC wsRef;
+ binditems.GetRef(wsRef);
+ FX_DWORD dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
+ XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent |
+ XFA_RESOLVENODE_ALL;
+ XFA_RESOLVENODE_RS rs;
+ pScriptContext->ResolveObjects(pWidgetNode, wsRef, rs, dwStyle);
+ int32_t iCount = rs.nodes.GetSize();
+ pAcc->DeleteItem(-1);
+ if (rs.dwFlags != XFA_RESOVENODE_RSTYPE_Nodes || iCount < 1) {
+ continue;
+ }
+ CFX_WideStringC wsValueRef, wsLabelRef;
+ binditems.GetValueRef(wsValueRef);
+ binditems.GetLabelRef(wsLabelRef);
+ FX_BOOL bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef;
+ FX_BOOL bLabelUseContent =
+ wsLabelRef.IsEmpty() || wsLabelRef == FX_WSTRC(L"$");
+ FX_BOOL bValueUseContent =
+ wsValueRef.IsEmpty() || wsValueRef == FX_WSTRC(L"$");
+ CFX_WideString wsValue, wsLabel;
+ FX_DWORD uValueHash = FX_HashCode_String_GetW(CFX_WideString(wsValueRef),
+ wsValueRef.GetLength());
+ for (int32_t i = 0; i < iCount; i++) {
+ CXFA_Object* refObj = rs.nodes[i];
+ if (!refObj->IsNode()) {
+ continue;
+ }
+ CXFA_Node* refNode = (CXFA_Node*)refObj;
+ if (bValueUseContent) {
+ wsValue = refNode->GetContent();
+ } else {
+ CXFA_Node* nodeValue = refNode->GetFirstChildByName(uValueHash);
+ if (nodeValue == NULL) {
+ wsValue = refNode->GetContent();
+ } else {
+ wsValue = nodeValue->GetContent();
+ }
+ }
+ if (!bUseValue) {
+ if (bLabelUseContent) {
+ wsLabel = refNode->GetContent();
+ } else {
+ CXFA_Node* nodeLabel = refNode->GetFirstChildByName(wsLabelRef);
+ if (nodeLabel != NULL) {
+ wsLabel = nodeLabel->GetContent();
+ }
+ }
+ } else {
+ wsLabel = wsValue;
+ }
+ pAcc->InsertItem(wsLabel, wsValue);
+ }
+ }
+ m_bindItems.RemoveAll();
+}
+void CXFA_FFDocView::SetChangeMark() {
+ if (m_iStatus < XFA_DOCVIEW_LAYOUTSTATUS_End) {
+ return;
+ }
+ m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
+}
+CXFA_Node* CXFA_FFDocView::GetRootSubform() {
+ CXFA_Node* pFormPacketNode =
+ (CXFA_Node*)m_pDoc->GetXFADoc()->GetXFANode(XFA_HASHCODE_Form);
+ if (!pFormPacketNode) {
+ return NULL;
+ }
+ return pFormPacketNode->GetFirstChildByClass(XFA_ELEMENT_Subform);
+}
+CXFA_FFDocWidgetIterator::CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView,
+ CXFA_Node* pTravelRoot)
+ : m_ContentIterator(pTravelRoot) {
+ m_pDocView = pDocView;
+ m_pCurWidget = NULL;
+}
+CXFA_FFDocWidgetIterator::~CXFA_FFDocWidgetIterator() {}
+void CXFA_FFDocWidgetIterator::Reset() {
+ m_ContentIterator.Reset();
+ m_pCurWidget = NULL;
+}
+IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToFirst() {
+ return NULL;
+}
+IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToLast() {
+ return NULL;
+}
+IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToNext() {
+ CXFA_Node* pItem = m_pCurWidget ? m_ContentIterator.MoveToNext()
+ : m_ContentIterator.GetCurrent();
+ while (pItem) {
+ if (CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pItem->GetWidgetData()) {
+ while ((m_pCurWidget = pAcc->GetNextWidget(NULL)) != NULL) {
+ if (!m_pCurWidget->IsLoaded() &&
+ (m_pCurWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
+ m_pCurWidget->LoadWidget();
+ }
+ return m_pCurWidget;
+ }
+ }
+ pItem = m_ContentIterator.MoveToNext();
+ }
+ return NULL;
+}
+IXFA_Widget* CXFA_FFDocWidgetIterator::MoveToPrevious() {
+ return NULL;
+}
+IXFA_Widget* CXFA_FFDocWidgetIterator::GetCurrentWidget() {
+ return NULL;
+}
+FX_BOOL CXFA_FFDocWidgetIterator::SetCurrentWidget(IXFA_Widget* hWidget) {
+ return FALSE;
+}
+IXFA_WidgetAccIterator* XFA_WidgetAccIterator_Create(
+ CXFA_WidgetAcc* pTravelRoot,
+ XFA_WIDGETORDER eOrder) {
+ if (!pTravelRoot) {
+ return NULL;
+ }
+ return new CXFA_WidgetAccIterator(pTravelRoot->GetDocView(),
+ pTravelRoot->GetNode());
+}
+CXFA_WidgetAccIterator::CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView,
+ CXFA_Node* pTravelRoot)
+ : m_ContentIterator(pTravelRoot) {
+ m_pDocView = pDocView;
+ m_pCurWidgetAcc = NULL;
+}
+CXFA_WidgetAccIterator::~CXFA_WidgetAccIterator() {}
+void CXFA_WidgetAccIterator::Reset() {
+ m_pCurWidgetAcc = NULL;
+ m_ContentIterator.Reset();
+}
+CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToFirst() {
+ return NULL;
+}
+CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToLast() {
+ return NULL;
+}
+CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToNext() {
+ CXFA_Node* pItem = m_pCurWidgetAcc ? m_ContentIterator.MoveToNext()
+ : m_ContentIterator.GetCurrent();
+ while (pItem) {
+ if ((m_pCurWidgetAcc = (CXFA_WidgetAcc*)pItem->GetWidgetData()) != NULL) {
+ return m_pCurWidgetAcc;
+ }
+ pItem = m_ContentIterator.MoveToNext();
+ }
+ return NULL;
+}
+CXFA_WidgetAcc* CXFA_WidgetAccIterator::MoveToPrevious() {
+ return NULL;
+}
+CXFA_WidgetAcc* CXFA_WidgetAccIterator::GetCurrentWidgetAcc() {
+ return NULL;
+}
+FX_BOOL CXFA_WidgetAccIterator::SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget) {
+ return FALSE;
+}
+void CXFA_WidgetAccIterator::SkipTree() {
+ m_ContentIterator.SkipChildrenAndMoveToNext();
+ m_pCurWidgetAcc = NULL;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffdocview.h b/xfa/src/fxfa/src/app/xfa_ffdocview.h
index 210104d448..a8d39b5bd6 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdocview.h
+++ b/xfa/src/fxfa/src/app/xfa_ffdocview.h
@@ -1,172 +1,172 @@
-// 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 FXFA_SRC_APP_XFA_FFDOCVIEW_H_
-#define FXFA_SRC_APP_XFA_FFDOCVIEW_H_
-
-#include "xfa_ffdoc.h"
-
-class CXFA_FFPageView;
-class CXFA_FFWidgetHandler;
-class CXFA_FFDoc;
-class CXFA_FFWidget;
-extern const XFA_ATTRIBUTEENUM gs_EventActivity[];
-enum XFA_DOCVIEW_LAYOUTSTATUS {
- XFA_DOCVIEW_LAYOUTSTATUS_None,
- XFA_DOCVIEW_LAYOUTSTATUS_Start,
- XFA_DOCVIEW_LAYOUTSTATUS_FormInitialize,
- XFA_DOCVIEW_LAYOUTSTATUS_FormInitCalculate,
- XFA_DOCVIEW_LAYOUTSTATUS_FormInitValidate,
- XFA_DOCVIEW_LAYOUTSTATUS_FormFormReady,
- XFA_DOCVIEW_LAYOUTSTATUS_Doing,
- XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitialize,
- XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitCalculate,
- XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitValidate,
- XFA_DOCVIEW_LAYOUTSTATUS_PagesetFormReady,
- XFA_DOCVIEW_LAYOUTSTATUS_LayoutReady,
- XFA_DOCVIEW_LAYOUTSTATUS_DocReady,
- XFA_DOCVIEW_LAYOUTSTATUS_End,
- XFA_DOCVIEW_LAYOUTSTATUS_Next,
-};
-class CXFA_FFDocView : public IXFA_DocView {
- public:
- CXFA_FFDocView(CXFA_FFDoc* pDoc);
- ~CXFA_FFDocView();
-
- virtual IXFA_Doc* GetDoc() { return m_pDoc; }
- virtual int32_t StartLayout(int32_t iStartPage = 0);
- virtual int32_t DoLayout(IFX_Pause* pPause = NULL);
- virtual void StopLayout();
- virtual int32_t GetLayoutStatus();
- virtual void UpdateDocView();
- virtual int32_t CountPageViews();
- virtual IXFA_PageView* GetPageView(int32_t nIndex);
- virtual IXFA_Widget* GetWidgetByName(const CFX_WideStringC& wsName);
- virtual CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName);
- virtual void ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc = NULL);
- virtual int32_t ProcessWidgetEvent(CXFA_EventParam* pParam,
- CXFA_WidgetAcc* pWidgetAcc = NULL);
- virtual IXFA_WidgetHandler* GetWidgetHandler();
- virtual IXFA_WidgetIterator* CreateWidgetIterator();
- virtual IXFA_WidgetAccIterator* CreateWidgetAccIterator(
- XFA_WIDGETORDER eOrder = XFA_WIDGETORDER_PreOrder);
- virtual IXFA_Widget* GetFocusWidget();
- virtual void KillFocus();
- virtual FX_BOOL SetFocus(IXFA_Widget* hWidget);
- CXFA_FFWidget* GetWidgetByName(const CFX_WideStringC& wsName,
- CXFA_FFWidget* pRefWidget = NULL);
- CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName,
- CXFA_WidgetAcc* pRefWidgetAcc = NULL);
- IXFA_DocLayout* GetXFALayout() const;
- void OnPageEvent(IXFA_LayoutPage* pSender,
- XFA_PAGEEVENT eEvent,
- int32_t iPageIndex);
- void LockUpdate();
- void UnlockUpdate();
- FX_BOOL IsUpdateLocked();
- void ClearInvalidateList();
- void AddInvalidateRect(CXFA_FFWidget* pWidget, const CFX_RectF& rtInvalidate);
- void AddInvalidateRect(IXFA_PageView* pPageView,
- const CFX_RectF& rtInvalidate);
- void RunInvalidate();
- void RunDocClose();
- void DestroyDocView();
-
- FX_BOOL InitValidate(CXFA_Node* pNode);
- FX_BOOL RunValidate();
-
- void SetChangeMark();
-
- void AddValidateWidget(CXFA_WidgetAcc* pWidget);
- void AddCalculateNodeNotify(CXFA_Node* pNodeChange);
- void AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc);
- int32_t RunCalculateWidgets();
- FX_BOOL IsStaticNotify();
- FX_BOOL RunLayout();
- void RunSubformIndexChange();
- void AddNewFormNode(CXFA_Node* pNode);
- void AddIndexChangedSubform(CXFA_Node* pNode);
- CXFA_WidgetAcc* GetFocusWidgetAcc();
- void SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc);
- void DeleteLayoutItem(CXFA_FFWidget* pWidget);
- int32_t ExecEventActivityByDeepFirst(CXFA_Node* pFormNode,
- XFA_EVENTTYPE eEventType,
- FX_BOOL bIsFormReady = FALSE,
- FX_BOOL bRecursive = TRUE,
- CXFA_Node* pExclude = NULL);
- FX_BOOL m_bLayoutEvent;
- CFX_WideStringArray m_arrNullTestMsg;
- CXFA_FFWidget* m_pListFocusWidget;
- FX_BOOL m_bInLayoutStatus;
-
- protected:
- FX_BOOL RunEventLayoutReady();
- void RunBindItems();
- FX_BOOL InitCalculate(CXFA_Node* pNode);
- void InitLayout(CXFA_Node* pNode);
- void RunCalculateRecursive(int32_t& iIndex);
- void ShowNullTestMsg();
- FX_BOOL ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc);
- CXFA_Node* GetRootSubform();
-
- CXFA_FFDoc* m_pDoc;
- CXFA_FFWidgetHandler* m_pWidgetHandler;
- IXFA_DocLayout* m_pXFADocLayout;
- CXFA_WidgetAcc* m_pFocusAcc;
- CXFA_FFWidget* m_pFocusWidget;
- CXFA_FFWidget* m_pOldFocusWidget;
- CFX_MapPtrToPtr m_mapPageInvalidate;
- CFX_PtrArray m_ValidateAccs;
- CFX_PtrArray m_bindItems;
- CFX_PtrArray m_CalculateAccs;
-
- CFX_PtrArray m_NewAddedNodes;
- CFX_PtrArray m_IndexChangedSubforms;
- XFA_DOCVIEW_LAYOUTSTATUS m_iStatus;
- int32_t m_iLock;
- friend class CXFA_FFNotify;
-};
-class CXFA_FFDocWidgetIterator : public IXFA_WidgetIterator {
- public:
- CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot);
- virtual ~CXFA_FFDocWidgetIterator();
-
- virtual void Release() { delete this; }
-
- virtual void Reset();
- virtual IXFA_Widget* MoveToFirst();
- virtual IXFA_Widget* MoveToLast();
- virtual IXFA_Widget* MoveToNext();
- virtual IXFA_Widget* MoveToPrevious();
- virtual IXFA_Widget* GetCurrentWidget();
- virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget);
-
- protected:
- CXFA_ContainerIterator m_ContentIterator;
- CXFA_FFDocView* m_pDocView;
- CXFA_FFWidget* m_pCurWidget;
-};
-class CXFA_WidgetAccIterator : public IXFA_WidgetAccIterator {
- public:
- CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot);
- virtual ~CXFA_WidgetAccIterator();
- virtual void Release() { delete this; }
- virtual void Reset();
- virtual CXFA_WidgetAcc* MoveToFirst();
- virtual CXFA_WidgetAcc* MoveToLast();
- virtual CXFA_WidgetAcc* MoveToNext();
- virtual CXFA_WidgetAcc* MoveToPrevious();
- virtual CXFA_WidgetAcc* GetCurrentWidgetAcc();
- virtual FX_BOOL SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget);
- virtual void SkipTree();
-
- protected:
- CXFA_ContainerIterator m_ContentIterator;
- CXFA_FFDocView* m_pDocView;
- CXFA_WidgetAcc* m_pCurWidgetAcc;
-};
-
-#endif // FXFA_SRC_APP_XFA_FFDOCVIEW_H_
+// 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 FXFA_SRC_APP_XFA_FFDOCVIEW_H_
+#define FXFA_SRC_APP_XFA_FFDOCVIEW_H_
+
+#include "xfa_ffdoc.h"
+
+class CXFA_FFPageView;
+class CXFA_FFWidgetHandler;
+class CXFA_FFDoc;
+class CXFA_FFWidget;
+extern const XFA_ATTRIBUTEENUM gs_EventActivity[];
+enum XFA_DOCVIEW_LAYOUTSTATUS {
+ XFA_DOCVIEW_LAYOUTSTATUS_None,
+ XFA_DOCVIEW_LAYOUTSTATUS_Start,
+ XFA_DOCVIEW_LAYOUTSTATUS_FormInitialize,
+ XFA_DOCVIEW_LAYOUTSTATUS_FormInitCalculate,
+ XFA_DOCVIEW_LAYOUTSTATUS_FormInitValidate,
+ XFA_DOCVIEW_LAYOUTSTATUS_FormFormReady,
+ XFA_DOCVIEW_LAYOUTSTATUS_Doing,
+ XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitialize,
+ XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitCalculate,
+ XFA_DOCVIEW_LAYOUTSTATUS_PagesetInitValidate,
+ XFA_DOCVIEW_LAYOUTSTATUS_PagesetFormReady,
+ XFA_DOCVIEW_LAYOUTSTATUS_LayoutReady,
+ XFA_DOCVIEW_LAYOUTSTATUS_DocReady,
+ XFA_DOCVIEW_LAYOUTSTATUS_End,
+ XFA_DOCVIEW_LAYOUTSTATUS_Next,
+};
+class CXFA_FFDocView : public IXFA_DocView {
+ public:
+ CXFA_FFDocView(CXFA_FFDoc* pDoc);
+ ~CXFA_FFDocView();
+
+ virtual IXFA_Doc* GetDoc() { return m_pDoc; }
+ virtual int32_t StartLayout(int32_t iStartPage = 0);
+ virtual int32_t DoLayout(IFX_Pause* pPause = NULL);
+ virtual void StopLayout();
+ virtual int32_t GetLayoutStatus();
+ virtual void UpdateDocView();
+ virtual int32_t CountPageViews();
+ virtual IXFA_PageView* GetPageView(int32_t nIndex);
+ virtual IXFA_Widget* GetWidgetByName(const CFX_WideStringC& wsName);
+ virtual CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName);
+ virtual void ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc = NULL);
+ virtual int32_t ProcessWidgetEvent(CXFA_EventParam* pParam,
+ CXFA_WidgetAcc* pWidgetAcc = NULL);
+ virtual IXFA_WidgetHandler* GetWidgetHandler();
+ virtual IXFA_WidgetIterator* CreateWidgetIterator();
+ virtual IXFA_WidgetAccIterator* CreateWidgetAccIterator(
+ XFA_WIDGETORDER eOrder = XFA_WIDGETORDER_PreOrder);
+ virtual IXFA_Widget* GetFocusWidget();
+ virtual void KillFocus();
+ virtual FX_BOOL SetFocus(IXFA_Widget* hWidget);
+ CXFA_FFWidget* GetWidgetByName(const CFX_WideStringC& wsName,
+ CXFA_FFWidget* pRefWidget = NULL);
+ CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName,
+ CXFA_WidgetAcc* pRefWidgetAcc = NULL);
+ IXFA_DocLayout* GetXFALayout() const;
+ void OnPageEvent(IXFA_LayoutPage* pSender,
+ XFA_PAGEEVENT eEvent,
+ int32_t iPageIndex);
+ void LockUpdate();
+ void UnlockUpdate();
+ FX_BOOL IsUpdateLocked();
+ void ClearInvalidateList();
+ void AddInvalidateRect(CXFA_FFWidget* pWidget, const CFX_RectF& rtInvalidate);
+ void AddInvalidateRect(IXFA_PageView* pPageView,
+ const CFX_RectF& rtInvalidate);
+ void RunInvalidate();
+ void RunDocClose();
+ void DestroyDocView();
+
+ FX_BOOL InitValidate(CXFA_Node* pNode);
+ FX_BOOL RunValidate();
+
+ void SetChangeMark();
+
+ void AddValidateWidget(CXFA_WidgetAcc* pWidget);
+ void AddCalculateNodeNotify(CXFA_Node* pNodeChange);
+ void AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc);
+ int32_t RunCalculateWidgets();
+ FX_BOOL IsStaticNotify();
+ FX_BOOL RunLayout();
+ void RunSubformIndexChange();
+ void AddNewFormNode(CXFA_Node* pNode);
+ void AddIndexChangedSubform(CXFA_Node* pNode);
+ CXFA_WidgetAcc* GetFocusWidgetAcc();
+ void SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc);
+ void DeleteLayoutItem(CXFA_FFWidget* pWidget);
+ int32_t ExecEventActivityByDeepFirst(CXFA_Node* pFormNode,
+ XFA_EVENTTYPE eEventType,
+ FX_BOOL bIsFormReady = FALSE,
+ FX_BOOL bRecursive = TRUE,
+ CXFA_Node* pExclude = NULL);
+ FX_BOOL m_bLayoutEvent;
+ CFX_WideStringArray m_arrNullTestMsg;
+ CXFA_FFWidget* m_pListFocusWidget;
+ FX_BOOL m_bInLayoutStatus;
+
+ protected:
+ FX_BOOL RunEventLayoutReady();
+ void RunBindItems();
+ FX_BOOL InitCalculate(CXFA_Node* pNode);
+ void InitLayout(CXFA_Node* pNode);
+ void RunCalculateRecursive(int32_t& iIndex);
+ void ShowNullTestMsg();
+ FX_BOOL ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc);
+ CXFA_Node* GetRootSubform();
+
+ CXFA_FFDoc* m_pDoc;
+ CXFA_FFWidgetHandler* m_pWidgetHandler;
+ IXFA_DocLayout* m_pXFADocLayout;
+ CXFA_WidgetAcc* m_pFocusAcc;
+ CXFA_FFWidget* m_pFocusWidget;
+ CXFA_FFWidget* m_pOldFocusWidget;
+ CFX_MapPtrToPtr m_mapPageInvalidate;
+ CFX_PtrArray m_ValidateAccs;
+ CFX_PtrArray m_bindItems;
+ CFX_PtrArray m_CalculateAccs;
+
+ CFX_PtrArray m_NewAddedNodes;
+ CFX_PtrArray m_IndexChangedSubforms;
+ XFA_DOCVIEW_LAYOUTSTATUS m_iStatus;
+ int32_t m_iLock;
+ friend class CXFA_FFNotify;
+};
+class CXFA_FFDocWidgetIterator : public IXFA_WidgetIterator {
+ public:
+ CXFA_FFDocWidgetIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot);
+ virtual ~CXFA_FFDocWidgetIterator();
+
+ virtual void Release() { delete this; }
+
+ virtual void Reset();
+ virtual IXFA_Widget* MoveToFirst();
+ virtual IXFA_Widget* MoveToLast();
+ virtual IXFA_Widget* MoveToNext();
+ virtual IXFA_Widget* MoveToPrevious();
+ virtual IXFA_Widget* GetCurrentWidget();
+ virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget);
+
+ protected:
+ CXFA_ContainerIterator m_ContentIterator;
+ CXFA_FFDocView* m_pDocView;
+ CXFA_FFWidget* m_pCurWidget;
+};
+class CXFA_WidgetAccIterator : public IXFA_WidgetAccIterator {
+ public:
+ CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView, CXFA_Node* pTravelRoot);
+ virtual ~CXFA_WidgetAccIterator();
+ virtual void Release() { delete this; }
+ virtual void Reset();
+ virtual CXFA_WidgetAcc* MoveToFirst();
+ virtual CXFA_WidgetAcc* MoveToLast();
+ virtual CXFA_WidgetAcc* MoveToNext();
+ virtual CXFA_WidgetAcc* MoveToPrevious();
+ virtual CXFA_WidgetAcc* GetCurrentWidgetAcc();
+ virtual FX_BOOL SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget);
+ virtual void SkipTree();
+
+ protected:
+ CXFA_ContainerIterator m_ContentIterator;
+ CXFA_FFDocView* m_pDocView;
+ CXFA_WidgetAcc* m_pCurWidgetAcc;
+};
+
+#endif // FXFA_SRC_APP_XFA_FFDOCVIEW_H_
diff --git a/xfa/src/fxfa/src/app/xfa_ffdraw.cpp b/xfa/src/fxfa/src/app/xfa_ffdraw.cpp
index a241b18d1c..61e294ea05 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdraw.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffdraw.cpp
@@ -1,16 +1,16 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffdraw.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-CXFA_FFDraw::CXFA_FFDraw(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFWidget(pPageView, pDataAcc) {}
-CXFA_FFDraw::~CXFA_FFDraw() {}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffdraw.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+CXFA_FFDraw::CXFA_FFDraw(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFWidget(pPageView, pDataAcc) {}
+CXFA_FFDraw::~CXFA_FFDraw() {}
diff --git a/xfa/src/fxfa/src/app/xfa_ffdraw.h b/xfa/src/fxfa/src/app/xfa_ffdraw.h
index da349489c7..3833a845f4 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdraw.h
+++ b/xfa/src/fxfa/src/app/xfa_ffdraw.h
@@ -1,16 +1,16 @@
-// 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 _FXFA_FORMFILLER_DRAW_IMP_H
-#define _FXFA_FORMFILLER_DRAW_IMP_H
-class CXFA_FFDraw : public CXFA_FFWidget {
- public:
- CXFA_FFDraw(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFDraw();
-
- protected:
-};
-#endif
+// 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 _FXFA_FORMFILLER_DRAW_IMP_H
+#define _FXFA_FORMFILLER_DRAW_IMP_H
+class CXFA_FFDraw : public CXFA_FFWidget {
+ public:
+ CXFA_FFDraw(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFDraw();
+
+ protected:
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffexclgroup.cpp b/xfa/src/fxfa/src/app/xfa_ffexclgroup.cpp
index 0d57e4a613..716842f3fb 100644
--- a/xfa/src/fxfa/src/app/xfa_ffexclgroup.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffexclgroup.cpp
@@ -1,31 +1,31 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffexclgroup.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-CXFA_FFExclGroup::CXFA_FFExclGroup(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFWidget(pPageView, pDataAcc) {}
-CXFA_FFExclGroup::~CXFA_FFExclGroup() {}
-void CXFA_FFExclGroup::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffexclgroup.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+CXFA_FFExclGroup::CXFA_FFExclGroup(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFWidget(pPageView, pDataAcc) {}
+CXFA_FFExclGroup::~CXFA_FFExclGroup() {}
+void CXFA_FFExclGroup::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffexclgroup.h b/xfa/src/fxfa/src/app/xfa_ffexclgroup.h
index 2baa187587..ba247674b5 100644
--- a/xfa/src/fxfa/src/app/xfa_ffexclgroup.h
+++ b/xfa/src/fxfa/src/app/xfa_ffexclgroup.h
@@ -1,21 +1,21 @@
-// 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 _FXFA_FORMFILLER_EXCLGROUP_IMP_H
-#define _FXFA_FORMFILLER_EXCLGROUP_IMP_H
-class CXFA_FFExclGroup : public CXFA_FFWidget {
- public:
- CXFA_FFExclGroup(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFExclGroup();
-
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
-
- protected:
-};
-#endif
+// 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 _FXFA_FORMFILLER_EXCLGROUP_IMP_H
+#define _FXFA_FORMFILLER_EXCLGROUP_IMP_H
+class CXFA_FFExclGroup : public CXFA_FFWidget {
+ public:
+ CXFA_FFExclGroup(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFExclGroup();
+
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+
+ protected:
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_fffield.cpp b/xfa/src/fxfa/src/app/xfa_fffield.cpp
index b9c7f7a751..78026c7c00 100644
--- a/xfa/src/fxfa/src/app/xfa_fffield.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fffield.cpp
@@ -1,850 +1,850 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-#include "xfa_fwltheme.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffdocview.h"
-CXFA_FFField::CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFWidget(pPageView, pDataAcc), m_pNormalWidget(NULL) {
- m_rtUI.Set(0, 0, 0, 0);
- m_rtCaption.Set(0, 0, 0, 0);
-}
-CXFA_FFField::~CXFA_FFField() {
- CXFA_FFField::UnloadWidget();
-}
-FX_BOOL CXFA_FFField::GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus) {
- if (bDrawFocus) {
- XFA_ELEMENT type = (XFA_ELEMENT)m_pDataAcc->GetUIType();
- if (type == XFA_ELEMENT_Button || type == XFA_ELEMENT_CheckButton ||
- type == XFA_ELEMENT_ImageEdit || type == XFA_ELEMENT_Signature ||
- type == XFA_ELEMENT_ChoiceList) {
- rtBox = m_rtUI;
- CFX_Matrix mt;
- GetRotateMatrix(mt);
- mt.TransformRect(rtBox);
- return TRUE;
- }
- return FALSE;
- }
-#ifndef _XFA_EMB
- return CXFA_FFWidget::GetBBox(rtBox, dwStatus);
-#endif
- GetRectWithoutRotate(rtBox);
- if (m_pNormalWidget) {
- CFX_RectF rtWidget;
- m_pNormalWidget->GetWidgetRect(rtWidget);
- rtBox.Union(rtWidget);
- }
- CFX_Matrix mt;
- GetRotateMatrix(mt);
- mt.TransformRect(rtBox);
- return TRUE;
-}
-void CXFA_FFField::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
- RenderCaption(pGS, &mtRotate);
- DrawHighlight(pGS, &mtRotate, dwStatus, FALSE);
- CFX_RectF rtWidget;
- m_pNormalWidget->GetWidgetRect(rtWidget);
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
- mt.Concat(mtRotate);
- GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
- pGS, &mt);
-}
-void CXFA_FFField::DrawHighlight(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- FX_BOOL bEllipse) {
- if (m_rtUI.IsEmpty() || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- return;
- }
- if ((dwStatus & XFA_WIDGETSTATUS_Highlight) &&
- m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open) {
- CXFA_FFDoc* pDoc = GetDoc();
- CFX_Color crHighlight(pDoc->GetDocProvider()->GetHighlightColor(pDoc));
- pGS->SetFillColor(&crHighlight);
- CFX_Path path;
- path.Create();
- if (bEllipse) {
- path.AddEllipse(m_rtUI);
- } else {
- path.AddRectangle(m_rtUI.left, m_rtUI.top, m_rtUI.width, m_rtUI.height);
- }
- pGS->FillPath(&path, FXFILL_WINDING, pMatrix);
- }
-}
-void CXFA_FFField::DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix) {
- if (m_dwStatus & XFA_WIDGETSTATUS_Focused) {
- CFX_Color cr(0xFF000000);
- pGS->SetStrokeColor(&cr);
- FX_FLOAT DashPattern[2] = {1, 1};
- pGS->SetLineDash(0.0f, DashPattern, 2);
- pGS->SetLineWidth(0, FALSE);
- CFX_Path path;
- path.Create();
- path.AddRectangle(m_rtUI.left, m_rtUI.top, m_rtUI.width, m_rtUI.height);
- pGS->StrokePath(&path, pMatrix);
- }
-}
-void CXFA_FFField::SetFWLThemeProvider() {
- if (m_pNormalWidget) {
- m_pNormalWidget->m_pIface->SetThemeProvider(GetApp()->GetFWLTheme());
- }
-}
-FX_BOOL CXFA_FFField::IsLoaded() {
- return m_pNormalWidget != NULL && CXFA_FFWidget::IsLoaded();
-}
-FX_BOOL CXFA_FFField::LoadWidget() {
- SetFWLThemeProvider();
- m_pDataAcc->LoadCaption();
- PerformLayout();
- return TRUE;
-}
-void CXFA_FFField::UnloadWidget() {
- delete m_pNormalWidget;
- m_pNormalWidget = nullptr;
-}
-void CXFA_FFField::SetEditScrollOffset() {
- XFA_ELEMENT eType = m_pDataAcc->GetUIType();
- if (eType == XFA_ELEMENT_TextEdit || eType == XFA_ELEMENT_NumericEdit ||
- eType == XFA_ELEMENT_PasswordEdit) {
- FX_FLOAT fScrollOffset = 0;
- CXFA_FFField* pPrev = static_cast<CXFA_FFField*>(GetPrev());
- if (pPrev) {
- CFX_RectF rtMargin;
- m_pDataAcc->GetUIMargin(rtMargin);
- fScrollOffset = -rtMargin.top;
- }
- while (pPrev) {
- fScrollOffset += pPrev->m_rtUI.height;
- pPrev = static_cast<CXFA_FFField*>(pPrev->GetPrev());
- }
- ((CFWL_Edit*)m_pNormalWidget)->SetScrollOffset(fScrollOffset);
- }
-}
-FX_BOOL CXFA_FFField::PerformLayout() {
- CXFA_FFWidget::PerformLayout();
- CapPlacement();
- LayoutCaption();
- SetFWLRect();
- SetEditScrollOffset();
- if (m_pNormalWidget) {
- m_pNormalWidget->Update();
- }
- return TRUE;
-}
-void CXFA_FFField::CapPlacement() {
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- CXFA_Margin mgWidget = m_pDataAcc->GetMargin();
- if (mgWidget) {
- CXFA_LayoutItem* pItem = this;
- FX_FLOAT fLeftInset = 0, fRightInset = 0, fTopInset = 0, fBottomInset = 0;
- mgWidget.GetLeftInset(fLeftInset);
- mgWidget.GetRightInset(fRightInset);
- mgWidget.GetTopInset(fTopInset);
- mgWidget.GetBottomInset(fBottomInset);
- if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
- rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
- } else {
- if (pItem->GetPrev() == NULL) {
- rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, 0);
- } else if (pItem->GetNext() == NULL) {
- rtWidget.Deflate(fLeftInset, 0, fRightInset, fBottomInset);
- } else {
- rtWidget.Deflate(fLeftInset, 0, fRightInset, 0);
- }
- }
- }
- XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown;
- FX_FLOAT fCapReserve = 0;
- CXFA_Caption caption = m_pDataAcc->GetCaption();
- if (caption.IsExistInXML() &&
- caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
- iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType();
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Top && GetPrev()) {
- m_rtCaption.Set(0, 0, 0, 0);
- } else if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom && GetNext()) {
- m_rtCaption.Set(0, 0, 0, 0);
- } else {
- fCapReserve = caption.GetReserve();
- CXFA_LayoutItem* pItem = this;
- if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
- m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width,
- rtWidget.height);
- } else {
- pItem = pItem->GetFirst();
- pItem->GetRect(m_rtCaption);
- pItem = pItem->GetNext();
- while (pItem) {
- CFX_RectF rtRect;
- pItem->GetRect(rtRect);
- m_rtCaption.height += rtRect.Height();
- pItem = pItem->GetNext();
- }
- XFA_RectWidthoutMargin(m_rtCaption, mgWidget);
- }
- CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
- if (fCapReserve <= 0 && pCapTextLayout) {
- CFX_SizeF size;
- size.Set(0, 0);
- CFX_SizeF minSize;
- minSize.Set(0, 0);
- CFX_SizeF maxSize;
- maxSize.Set(0, 0);
- pCapTextLayout->CalcSize(minSize, maxSize, size);
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
- iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
- fCapReserve = size.y;
- } else {
- fCapReserve = size.x;
- }
- }
- }
- }
- m_rtUI = rtWidget;
- switch (iCapPlacement) {
- case XFA_ATTRIBUTEENUM_Left: {
- m_rtCaption.width = fCapReserve;
- CapLeftRightPlacement(caption, rtWidget, iCapPlacement);
- m_rtUI.width -= fCapReserve;
- m_rtUI.left += fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Top: {
- m_rtCaption.height = fCapReserve;
- CapTopBottomPlacement(caption, rtWidget, iCapPlacement);
- m_rtUI.top += fCapReserve;
- m_rtUI.height -= fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Right: {
- m_rtCaption.left = m_rtCaption.right() - fCapReserve;
- m_rtCaption.width = fCapReserve;
- CapLeftRightPlacement(caption, rtWidget, iCapPlacement);
- m_rtUI.width -= fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Bottom: {
- m_rtCaption.top = m_rtCaption.bottom() - fCapReserve;
- m_rtCaption.height = fCapReserve;
- CapTopBottomPlacement(caption, rtWidget, iCapPlacement);
- m_rtUI.height -= fCapReserve;
- } break;
- case XFA_ATTRIBUTEENUM_Inline:
- break;
- default:
- break;
- }
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- if (borderUI) {
- CXFA_Margin margin = borderUI.GetMargin();
- if (margin.IsExistInXML()) {
- XFA_RectWidthoutMargin(m_rtUI, margin);
- }
- }
- m_rtUI.Normalize();
-}
-void CXFA_FFField::CapTopBottomPlacement(CXFA_Caption caption,
- const CFX_RectF& rtWidget,
- int32_t iCapPlacement) {
- CFX_RectF rtUIMargin;
- m_pDataAcc->GetUIMargin(rtUIMargin);
- m_rtCaption.left += rtUIMargin.left;
- if (CXFA_Margin mgCap = caption.GetMargin()) {
- XFA_RectWidthoutMargin(m_rtCaption, mgCap);
- if (m_rtCaption.height < 0) {
- m_rtCaption.top += m_rtCaption.height;
- }
- }
- FX_FLOAT fWidth = rtUIMargin.left + rtUIMargin.width;
- FX_FLOAT fHeight = m_rtCaption.height + rtUIMargin.top + rtUIMargin.height;
- if (fWidth > rtWidget.width) {
- m_rtUI.width += fWidth - rtWidget.width;
- }
- if (fHeight == XFA_DEFAULTUI_HEIGHT && m_rtUI.height < XFA_MINUI_HEIGHT) {
- m_rtUI.height = XFA_MINUI_HEIGHT;
- m_rtCaption.top += rtUIMargin.top + rtUIMargin.height;
- } else if (fHeight > rtWidget.height) {
- m_rtUI.height += fHeight - rtWidget.height;
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
- m_rtCaption.top += fHeight - rtWidget.height;
- }
- }
-}
-void CXFA_FFField::CapLeftRightPlacement(CXFA_Caption caption,
- const CFX_RectF& rtWidget,
- int32_t iCapPlacement) {
- CFX_RectF rtUIMargin;
- m_pDataAcc->GetUIMargin(rtUIMargin);
- m_rtCaption.top += rtUIMargin.top;
- m_rtCaption.height -= rtUIMargin.top;
- if (CXFA_Margin mgCap = caption.GetMargin()) {
- XFA_RectWidthoutMargin(m_rtCaption, mgCap);
- if (m_rtCaption.height < 0) {
- m_rtCaption.top += m_rtCaption.height;
- }
- }
- FX_FLOAT fWidth = m_rtCaption.width + rtUIMargin.left + rtUIMargin.width;
- FX_FLOAT fHeight = rtUIMargin.top + rtUIMargin.height;
- if (fWidth > rtWidget.width) {
- m_rtUI.width += fWidth - rtWidget.width;
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) {
- m_rtCaption.left += fWidth - rtWidget.width;
- }
- }
- if (fHeight == XFA_DEFAULTUI_HEIGHT && m_rtUI.height < XFA_MINUI_HEIGHT) {
- m_rtUI.height = XFA_MINUI_HEIGHT;
- m_rtCaption.top += rtUIMargin.top + rtUIMargin.height;
- } else if (fHeight > rtWidget.height) {
- m_rtUI.height += fHeight - rtWidget.height;
- }
-}
-void CXFA_FFField::UpdateFWL() {
- if (m_pNormalWidget) {
- m_pNormalWidget->Update();
- }
-}
-FX_DWORD CXFA_FFField::UpdateUIProperty() {
- CXFA_Node* pUiNode = m_pDataAcc->GetUIChild();
- FX_DWORD dwStyle = 0;
- if (pUiNode && pUiNode->GetClassID() == XFA_ELEMENT_DefaultUi) {
- dwStyle = FWL_STYLEEXT_EDT_ReadOnly;
- }
- return dwStyle;
-}
-void CXFA_FFField::SetFWLRect() {
- if (!m_pNormalWidget) {
- return;
- }
- CFX_RectF rtUi = m_rtUI;
- if (rtUi.width < 1.0) {
- FXSYS_assert(rtUi.width < 1.0);
- rtUi.width = 1.0;
- }
- if (!m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- FX_FLOAT fFontSize = m_pDataAcc->GetFontSize();
- if (rtUi.height < fFontSize) {
- rtUi.height = fFontSize;
- }
- }
- m_pNormalWidget->SetWidgetRect(rtUi);
-}
-FX_BOOL CXFA_FFField::OnMouseEnter() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_MouseEnter;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnMouseExit() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_MouseLeave;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-void CXFA_FFField::FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy) {
- if (!m_pNormalWidget) {
- return;
- }
- CFX_RectF rtWidget;
- m_pNormalWidget->GetWidgetRect(rtWidget);
- fx -= rtWidget.left;
- fy -= rtWidget.top;
-}
-FX_BOOL CXFA_FFField::OnLButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- return FALSE;
- }
- if (!PtInActiveRect(fx, fy)) {
- return FALSE;
- }
- SetButtonDown(TRUE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- if (!IsButtonDown()) {
- return FALSE;
- }
- SetButtonDown(FALSE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnLButtonDblClk(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDblClk;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_MouseMove;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnMouseWheel(FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgMouseWheel ms;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_fDeltaX = zDelta;
- ms.m_fDeltaY = 0;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnRButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- return FALSE;
- }
- if (!PtInActiveRect(fx, fy)) {
- return FALSE;
- }
- SetButtonDown(TRUE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDown;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- if (!IsButtonDown()) {
- return FALSE;
- }
- SetButtonDown(FALSE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonUp;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnRButtonDblClk(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDblClk;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-
-FX_BOOL CXFA_FFField::OnSetFocus(CXFA_FFWidget* pOldWidget) {
- CXFA_FFWidget::OnSetFocus(pOldWidget);
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFWL_MsgSetFocus ms;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- m_dwStatus |= XFA_WIDGETSTATUS_Focused;
- AddInvalidateRect();
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnKillFocus(CXFA_FFWidget* pNewWidget) {
- if (!m_pNormalWidget) {
- return CXFA_FFWidget::OnKillFocus(pNewWidget);
- }
- CFWL_MsgKillFocus ms;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- m_dwStatus &= ~XFA_WIDGETSTATUS_Focused;
- AddInvalidateRect();
- CXFA_FFWidget::OnKillFocus(pNewWidget);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
- if (!m_pNormalWidget || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- return FALSE;
- }
- CFWL_MsgKey ms;
- ms.m_dwCmd = FWL_MSGKEYCMD_KeyDown;
- ms.m_dwFlags = dwFlags;
- ms.m_dwKeyCode = dwKeyCode;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
- if (!m_pNormalWidget || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- return FALSE;
- }
- CFWL_MsgKey ms;
- ms.m_dwCmd = FWL_MSGKEYCMD_KeyUp;
- ms.m_dwFlags = dwFlags;
- ms.m_dwKeyCode = dwKeyCode;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFField::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) {
- if (!m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- return FALSE;
- }
- if (dwChar == FWL_VKEY_Tab) {
- return TRUE;
- }
- if (!m_pNormalWidget) {
- return FALSE;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- CFWL_MsgKey ms;
- ms.m_dwCmd = FWL_MSGKEYCMD_Char;
- ms.m_dwFlags = dwFlags;
- ms.m_dwKeyCode = dwChar;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_DWORD CXFA_FFField::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
- if (m_pNormalWidget) {
- FX_FLOAT ffx = fx, ffy = fy;
- FWLToClient(ffx, ffy);
- FX_DWORD dwWidgetHit = m_pNormalWidget->HitTest(ffx, ffy);
- if (dwWidgetHit != FWL_WGTHITTEST_Unknown) {
- return FWL_WGTHITTEST_Client;
- }
- }
- CFX_RectF rtBox;
- GetRectWithoutRotate(rtBox);
- if (!rtBox.Contains(fx, fy)) {
- return FWL_WGTHITTEST_Unknown;
- }
- if (m_rtCaption.Contains(fx, fy)) {
- return FWL_WGTHITTEST_Titlebar;
- }
- return FWL_WGTHITTEST_Border;
-}
-FX_BOOL CXFA_FFField::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) {
- return TRUE;
-}
-FX_BOOL CXFA_FFField::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFX_RectF rtWidget;
- m_pNormalWidget->GetWidgetRect(rtWidget);
- if (rtWidget.Contains(fx, fy)) {
- return TRUE;
- }
- return FALSE;
-}
-void CXFA_FFField::LayoutCaption() {
- CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
- if (!pCapTextLayout) {
- return;
- }
- CFX_SizeF size;
- size.Set(m_rtCaption.width, m_rtCaption.height);
- FX_FLOAT fHeight = 0;
- pCapTextLayout->Layout(size, &fHeight);
- if (m_rtCaption.height < fHeight) {
- m_rtCaption.height = fHeight;
- }
-}
-void CXFA_FFField::RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix) {
- CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
- if (!pCapTextLayout) {
- return;
- }
- CXFA_Caption caption = m_pDataAcc->GetCaption();
- if (caption.IsExistInXML() &&
- caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) {
- if (!pCapTextLayout->IsLoaded()) {
- CFX_SizeF size;
- size.Set(m_rtCaption.width, m_rtCaption.height);
- pCapTextLayout->Layout(size);
- }
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- CFX_RectF rtClip = m_rtCaption;
- rtClip.Intersect(rtWidget);
- CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top);
- if (pMatrix) {
- pMatrix->TransformRect(rtClip);
- mt.Concat(*pMatrix);
- }
- pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
- }
-}
-FX_BOOL CXFA_FFField::ProcessCommittedData() {
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- if (!IsDataChanged()) {
- return FALSE;
- }
- if (CalculateOverride() != 1) {
- return FALSE;
- }
- if (!CommitData()) {
- return FALSE;
- }
- m_pDocView->SetChangeMark();
- m_pDocView->AddValidateWidget(m_pDataAcc);
- return TRUE;
-}
-int32_t CXFA_FFField::CalculateOverride() {
- CXFA_WidgetAcc* pAcc = m_pDataAcc->GetExclGroup();
- if (!pAcc) {
- return CalculateWidgetAcc(m_pDataAcc);
- }
- if (CalculateWidgetAcc(pAcc) == 0) {
- return 0;
- }
- CXFA_Node* pNode = pAcc->GetExclGroupFirstMember();
- if (!pNode) {
- return 1;
- }
- CXFA_WidgetAcc* pWidgetAcc = NULL;
- while (pNode) {
- pWidgetAcc = (CXFA_WidgetAcc*)pNode->GetWidgetData();
- if (!pWidgetAcc) {
- return 1;
- }
- if (CalculateWidgetAcc(pWidgetAcc) == 0) {
- return 0;
- }
- pNode = pWidgetAcc->GetExclGroupNextMember(pNode);
- }
- return 1;
-}
-int32_t CXFA_FFField::CalculateWidgetAcc(CXFA_WidgetAcc* pAcc) {
- CXFA_Calculate calc = pAcc->GetCalculate();
- if (!calc) {
- return 1;
- }
- XFA_VERSION version = pAcc->GetDoc()->GetXFADoc()->GetCurVersionMode();
- if (calc) {
- int32_t iOverride = calc.GetOverride();
- switch (iOverride) {
- case XFA_ATTRIBUTEENUM_Error: {
- if (version <= XFA_VERSION_204) {
- return 1;
- }
- IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider();
- if (pAppProvider) {
- CFX_WideString wsMessage;
- CFX_WideString wsWarning;
- pAppProvider->LoadString(XFA_IDS_NotModifyField, wsWarning);
- wsMessage += wsWarning;
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_CalcOverride, wsTitle);
- pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Warning,
- XFA_MB_OK);
- }
- }
- return 0;
- case XFA_ATTRIBUTEENUM_Warning: {
- if (version <= XFA_VERSION_204) {
- CXFA_Script script = calc.GetScript();
- if (!script) {
- return 1;
- }
- CFX_WideString wsExpression;
- script.GetExpression(wsExpression);
- if (wsExpression.IsEmpty()) {
- return 1;
- }
- }
- if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return 1;
- }
- IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider();
- if (pAppProvider) {
- CFX_WideString wsMessage;
- calc.GetMessageText(wsMessage);
- if (!wsMessage.IsEmpty()) {
- wsMessage += L"\r\n";
- }
- CFX_WideString wsWarning;
- pAppProvider->LoadString(XFA_IDS_ModifyField, wsWarning);
- wsMessage += wsWarning;
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_CalcOverride, wsTitle);
- if (pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Warning,
- XFA_MB_YesNo) == XFA_IDYes) {
- pAcc->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
- return 1;
- }
- }
- return 0;
- }
- case XFA_ATTRIBUTEENUM_Ignore:
- return 0;
- case XFA_ATTRIBUTEENUM_Disabled:
- pAcc->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
- default:
- return 1;
- }
- }
- return 1;
-}
-FX_BOOL CXFA_FFField::CommitData() {
- return FALSE;
-}
-FX_BOOL CXFA_FFField::IsDataChanged() {
- return FALSE;
-}
-void CXFA_FFField::TranslateFWLMessage(CFWL_Message* pMessage) {
- GetApp()->GetWidgetMgrDelegate()->OnProcessMessageToForm(pMessage);
-}
-int32_t CXFA_FFField::OnProcessMessage(CFWL_Message* pMessage) {
- return FWL_ERR_Succeeded;
-}
-FWL_ERR CXFA_FFField::OnProcessEvent(CFWL_Event* pEvent) {
- FX_DWORD dwEventID = pEvent->GetClassID();
- switch (dwEventID) {
- case FWL_EVTHASH_Mouse: {
- CFWL_EvtMouse* event = (CFWL_EvtMouse*)pEvent;
- if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseEnter) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_MouseEnter;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseEnter, &eParam);
- } else if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_MouseExit;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseExit, &eParam);
- } else if (event->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_MouseDown;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseDown, &eParam);
- } else if (event->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_MouseUp;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseUp, &eParam);
- }
- break;
- }
- case FWL_EVTHASH_Click: {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Click;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
- break;
- }
- default: {}
- }
- return FWL_ERR_Succeeded;
-}
-FWL_ERR CXFA_FFField::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- return FWL_ERR_Succeeded;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+#include "xfa_fwltheme.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffdocview.h"
+CXFA_FFField::CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFWidget(pPageView, pDataAcc), m_pNormalWidget(NULL) {
+ m_rtUI.Set(0, 0, 0, 0);
+ m_rtCaption.Set(0, 0, 0, 0);
+}
+CXFA_FFField::~CXFA_FFField() {
+ CXFA_FFField::UnloadWidget();
+}
+FX_BOOL CXFA_FFField::GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus) {
+ if (bDrawFocus) {
+ XFA_ELEMENT type = (XFA_ELEMENT)m_pDataAcc->GetUIType();
+ if (type == XFA_ELEMENT_Button || type == XFA_ELEMENT_CheckButton ||
+ type == XFA_ELEMENT_ImageEdit || type == XFA_ELEMENT_Signature ||
+ type == XFA_ELEMENT_ChoiceList) {
+ rtBox = m_rtUI;
+ CFX_Matrix mt;
+ GetRotateMatrix(mt);
+ mt.TransformRect(rtBox);
+ return TRUE;
+ }
+ return FALSE;
+ }
+#ifndef _XFA_EMB
+ return CXFA_FFWidget::GetBBox(rtBox, dwStatus);
+#endif
+ GetRectWithoutRotate(rtBox);
+ if (m_pNormalWidget) {
+ CFX_RectF rtWidget;
+ m_pNormalWidget->GetWidgetRect(rtWidget);
+ rtBox.Union(rtWidget);
+ }
+ CFX_Matrix mt;
+ GetRotateMatrix(mt);
+ mt.TransformRect(rtBox);
+ return TRUE;
+}
+void CXFA_FFField::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
+ RenderCaption(pGS, &mtRotate);
+ DrawHighlight(pGS, &mtRotate, dwStatus, FALSE);
+ CFX_RectF rtWidget;
+ m_pNormalWidget->GetWidgetRect(rtWidget);
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
+ mt.Concat(mtRotate);
+ GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
+ pGS, &mt);
+}
+void CXFA_FFField::DrawHighlight(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ FX_BOOL bEllipse) {
+ if (m_rtUI.IsEmpty() || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ return;
+ }
+ if ((dwStatus & XFA_WIDGETSTATUS_Highlight) &&
+ m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open) {
+ CXFA_FFDoc* pDoc = GetDoc();
+ CFX_Color crHighlight(pDoc->GetDocProvider()->GetHighlightColor(pDoc));
+ pGS->SetFillColor(&crHighlight);
+ CFX_Path path;
+ path.Create();
+ if (bEllipse) {
+ path.AddEllipse(m_rtUI);
+ } else {
+ path.AddRectangle(m_rtUI.left, m_rtUI.top, m_rtUI.width, m_rtUI.height);
+ }
+ pGS->FillPath(&path, FXFILL_WINDING, pMatrix);
+ }
+}
+void CXFA_FFField::DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix) {
+ if (m_dwStatus & XFA_WIDGETSTATUS_Focused) {
+ CFX_Color cr(0xFF000000);
+ pGS->SetStrokeColor(&cr);
+ FX_FLOAT DashPattern[2] = {1, 1};
+ pGS->SetLineDash(0.0f, DashPattern, 2);
+ pGS->SetLineWidth(0, FALSE);
+ CFX_Path path;
+ path.Create();
+ path.AddRectangle(m_rtUI.left, m_rtUI.top, m_rtUI.width, m_rtUI.height);
+ pGS->StrokePath(&path, pMatrix);
+ }
+}
+void CXFA_FFField::SetFWLThemeProvider() {
+ if (m_pNormalWidget) {
+ m_pNormalWidget->m_pIface->SetThemeProvider(GetApp()->GetFWLTheme());
+ }
+}
+FX_BOOL CXFA_FFField::IsLoaded() {
+ return m_pNormalWidget != NULL && CXFA_FFWidget::IsLoaded();
+}
+FX_BOOL CXFA_FFField::LoadWidget() {
+ SetFWLThemeProvider();
+ m_pDataAcc->LoadCaption();
+ PerformLayout();
+ return TRUE;
+}
+void CXFA_FFField::UnloadWidget() {
+ delete m_pNormalWidget;
+ m_pNormalWidget = nullptr;
+}
+void CXFA_FFField::SetEditScrollOffset() {
+ XFA_ELEMENT eType = m_pDataAcc->GetUIType();
+ if (eType == XFA_ELEMENT_TextEdit || eType == XFA_ELEMENT_NumericEdit ||
+ eType == XFA_ELEMENT_PasswordEdit) {
+ FX_FLOAT fScrollOffset = 0;
+ CXFA_FFField* pPrev = static_cast<CXFA_FFField*>(GetPrev());
+ if (pPrev) {
+ CFX_RectF rtMargin;
+ m_pDataAcc->GetUIMargin(rtMargin);
+ fScrollOffset = -rtMargin.top;
+ }
+ while (pPrev) {
+ fScrollOffset += pPrev->m_rtUI.height;
+ pPrev = static_cast<CXFA_FFField*>(pPrev->GetPrev());
+ }
+ ((CFWL_Edit*)m_pNormalWidget)->SetScrollOffset(fScrollOffset);
+ }
+}
+FX_BOOL CXFA_FFField::PerformLayout() {
+ CXFA_FFWidget::PerformLayout();
+ CapPlacement();
+ LayoutCaption();
+ SetFWLRect();
+ SetEditScrollOffset();
+ if (m_pNormalWidget) {
+ m_pNormalWidget->Update();
+ }
+ return TRUE;
+}
+void CXFA_FFField::CapPlacement() {
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ CXFA_Margin mgWidget = m_pDataAcc->GetMargin();
+ if (mgWidget) {
+ CXFA_LayoutItem* pItem = this;
+ FX_FLOAT fLeftInset = 0, fRightInset = 0, fTopInset = 0, fBottomInset = 0;
+ mgWidget.GetLeftInset(fLeftInset);
+ mgWidget.GetRightInset(fRightInset);
+ mgWidget.GetTopInset(fTopInset);
+ mgWidget.GetBottomInset(fBottomInset);
+ if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
+ rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
+ } else {
+ if (pItem->GetPrev() == NULL) {
+ rtWidget.Deflate(fLeftInset, fTopInset, fRightInset, 0);
+ } else if (pItem->GetNext() == NULL) {
+ rtWidget.Deflate(fLeftInset, 0, fRightInset, fBottomInset);
+ } else {
+ rtWidget.Deflate(fLeftInset, 0, fRightInset, 0);
+ }
+ }
+ }
+ XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown;
+ FX_FLOAT fCapReserve = 0;
+ CXFA_Caption caption = m_pDataAcc->GetCaption();
+ if (caption.IsExistInXML() &&
+ caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
+ iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType();
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Top && GetPrev()) {
+ m_rtCaption.Set(0, 0, 0, 0);
+ } else if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom && GetNext()) {
+ m_rtCaption.Set(0, 0, 0, 0);
+ } else {
+ fCapReserve = caption.GetReserve();
+ CXFA_LayoutItem* pItem = this;
+ if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
+ m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width,
+ rtWidget.height);
+ } else {
+ pItem = pItem->GetFirst();
+ pItem->GetRect(m_rtCaption);
+ pItem = pItem->GetNext();
+ while (pItem) {
+ CFX_RectF rtRect;
+ pItem->GetRect(rtRect);
+ m_rtCaption.height += rtRect.Height();
+ pItem = pItem->GetNext();
+ }
+ XFA_RectWidthoutMargin(m_rtCaption, mgWidget);
+ }
+ CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
+ if (fCapReserve <= 0 && pCapTextLayout) {
+ CFX_SizeF size;
+ size.Set(0, 0);
+ CFX_SizeF minSize;
+ minSize.Set(0, 0);
+ CFX_SizeF maxSize;
+ maxSize.Set(0, 0);
+ pCapTextLayout->CalcSize(minSize, maxSize, size);
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
+ iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
+ fCapReserve = size.y;
+ } else {
+ fCapReserve = size.x;
+ }
+ }
+ }
+ }
+ m_rtUI = rtWidget;
+ switch (iCapPlacement) {
+ case XFA_ATTRIBUTEENUM_Left: {
+ m_rtCaption.width = fCapReserve;
+ CapLeftRightPlacement(caption, rtWidget, iCapPlacement);
+ m_rtUI.width -= fCapReserve;
+ m_rtUI.left += fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Top: {
+ m_rtCaption.height = fCapReserve;
+ CapTopBottomPlacement(caption, rtWidget, iCapPlacement);
+ m_rtUI.top += fCapReserve;
+ m_rtUI.height -= fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Right: {
+ m_rtCaption.left = m_rtCaption.right() - fCapReserve;
+ m_rtCaption.width = fCapReserve;
+ CapLeftRightPlacement(caption, rtWidget, iCapPlacement);
+ m_rtUI.width -= fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Bottom: {
+ m_rtCaption.top = m_rtCaption.bottom() - fCapReserve;
+ m_rtCaption.height = fCapReserve;
+ CapTopBottomPlacement(caption, rtWidget, iCapPlacement);
+ m_rtUI.height -= fCapReserve;
+ } break;
+ case XFA_ATTRIBUTEENUM_Inline:
+ break;
+ default:
+ break;
+ }
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ if (borderUI) {
+ CXFA_Margin margin = borderUI.GetMargin();
+ if (margin.IsExistInXML()) {
+ XFA_RectWidthoutMargin(m_rtUI, margin);
+ }
+ }
+ m_rtUI.Normalize();
+}
+void CXFA_FFField::CapTopBottomPlacement(CXFA_Caption caption,
+ const CFX_RectF& rtWidget,
+ int32_t iCapPlacement) {
+ CFX_RectF rtUIMargin;
+ m_pDataAcc->GetUIMargin(rtUIMargin);
+ m_rtCaption.left += rtUIMargin.left;
+ if (CXFA_Margin mgCap = caption.GetMargin()) {
+ XFA_RectWidthoutMargin(m_rtCaption, mgCap);
+ if (m_rtCaption.height < 0) {
+ m_rtCaption.top += m_rtCaption.height;
+ }
+ }
+ FX_FLOAT fWidth = rtUIMargin.left + rtUIMargin.width;
+ FX_FLOAT fHeight = m_rtCaption.height + rtUIMargin.top + rtUIMargin.height;
+ if (fWidth > rtWidget.width) {
+ m_rtUI.width += fWidth - rtWidget.width;
+ }
+ if (fHeight == XFA_DEFAULTUI_HEIGHT && m_rtUI.height < XFA_MINUI_HEIGHT) {
+ m_rtUI.height = XFA_MINUI_HEIGHT;
+ m_rtCaption.top += rtUIMargin.top + rtUIMargin.height;
+ } else if (fHeight > rtWidget.height) {
+ m_rtUI.height += fHeight - rtWidget.height;
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom) {
+ m_rtCaption.top += fHeight - rtWidget.height;
+ }
+ }
+}
+void CXFA_FFField::CapLeftRightPlacement(CXFA_Caption caption,
+ const CFX_RectF& rtWidget,
+ int32_t iCapPlacement) {
+ CFX_RectF rtUIMargin;
+ m_pDataAcc->GetUIMargin(rtUIMargin);
+ m_rtCaption.top += rtUIMargin.top;
+ m_rtCaption.height -= rtUIMargin.top;
+ if (CXFA_Margin mgCap = caption.GetMargin()) {
+ XFA_RectWidthoutMargin(m_rtCaption, mgCap);
+ if (m_rtCaption.height < 0) {
+ m_rtCaption.top += m_rtCaption.height;
+ }
+ }
+ FX_FLOAT fWidth = m_rtCaption.width + rtUIMargin.left + rtUIMargin.width;
+ FX_FLOAT fHeight = rtUIMargin.top + rtUIMargin.height;
+ if (fWidth > rtWidget.width) {
+ m_rtUI.width += fWidth - rtWidget.width;
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Right) {
+ m_rtCaption.left += fWidth - rtWidget.width;
+ }
+ }
+ if (fHeight == XFA_DEFAULTUI_HEIGHT && m_rtUI.height < XFA_MINUI_HEIGHT) {
+ m_rtUI.height = XFA_MINUI_HEIGHT;
+ m_rtCaption.top += rtUIMargin.top + rtUIMargin.height;
+ } else if (fHeight > rtWidget.height) {
+ m_rtUI.height += fHeight - rtWidget.height;
+ }
+}
+void CXFA_FFField::UpdateFWL() {
+ if (m_pNormalWidget) {
+ m_pNormalWidget->Update();
+ }
+}
+FX_DWORD CXFA_FFField::UpdateUIProperty() {
+ CXFA_Node* pUiNode = m_pDataAcc->GetUIChild();
+ FX_DWORD dwStyle = 0;
+ if (pUiNode && pUiNode->GetClassID() == XFA_ELEMENT_DefaultUi) {
+ dwStyle = FWL_STYLEEXT_EDT_ReadOnly;
+ }
+ return dwStyle;
+}
+void CXFA_FFField::SetFWLRect() {
+ if (!m_pNormalWidget) {
+ return;
+ }
+ CFX_RectF rtUi = m_rtUI;
+ if (rtUi.width < 1.0) {
+ FXSYS_assert(rtUi.width < 1.0);
+ rtUi.width = 1.0;
+ }
+ if (!m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ FX_FLOAT fFontSize = m_pDataAcc->GetFontSize();
+ if (rtUi.height < fFontSize) {
+ rtUi.height = fFontSize;
+ }
+ }
+ m_pNormalWidget->SetWidgetRect(rtUi);
+}
+FX_BOOL CXFA_FFField::OnMouseEnter() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_MouseEnter;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnMouseExit() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_MouseLeave;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+void CXFA_FFField::FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy) {
+ if (!m_pNormalWidget) {
+ return;
+ }
+ CFX_RectF rtWidget;
+ m_pNormalWidget->GetWidgetRect(rtWidget);
+ fx -= rtWidget.left;
+ fy -= rtWidget.top;
+}
+FX_BOOL CXFA_FFField::OnLButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ return FALSE;
+ }
+ if (!PtInActiveRect(fx, fy)) {
+ return FALSE;
+ }
+ SetButtonDown(TRUE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ if (!IsButtonDown()) {
+ return FALSE;
+ }
+ SetButtonDown(FALSE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnLButtonDblClk(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDblClk;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_MouseMove;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnMouseWheel(FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgMouseWheel ms;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_fDeltaX = zDelta;
+ ms.m_fDeltaY = 0;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnRButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ return FALSE;
+ }
+ if (!PtInActiveRect(fx, fy)) {
+ return FALSE;
+ }
+ SetButtonDown(TRUE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDown;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ if (!IsButtonDown()) {
+ return FALSE;
+ }
+ SetButtonDown(FALSE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonUp;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnRButtonDblClk(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDblClk;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+
+FX_BOOL CXFA_FFField::OnSetFocus(CXFA_FFWidget* pOldWidget) {
+ CXFA_FFWidget::OnSetFocus(pOldWidget);
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFWL_MsgSetFocus ms;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ m_dwStatus |= XFA_WIDGETSTATUS_Focused;
+ AddInvalidateRect();
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnKillFocus(CXFA_FFWidget* pNewWidget) {
+ if (!m_pNormalWidget) {
+ return CXFA_FFWidget::OnKillFocus(pNewWidget);
+ }
+ CFWL_MsgKillFocus ms;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ m_dwStatus &= ~XFA_WIDGETSTATUS_Focused;
+ AddInvalidateRect();
+ CXFA_FFWidget::OnKillFocus(pNewWidget);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
+ if (!m_pNormalWidget || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ return FALSE;
+ }
+ CFWL_MsgKey ms;
+ ms.m_dwCmd = FWL_MSGKEYCMD_KeyDown;
+ ms.m_dwFlags = dwFlags;
+ ms.m_dwKeyCode = dwKeyCode;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
+ if (!m_pNormalWidget || !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ return FALSE;
+ }
+ CFWL_MsgKey ms;
+ ms.m_dwCmd = FWL_MSGKEYCMD_KeyUp;
+ ms.m_dwFlags = dwFlags;
+ ms.m_dwKeyCode = dwKeyCode;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) {
+ if (!m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ return FALSE;
+ }
+ if (dwChar == FWL_VKEY_Tab) {
+ return TRUE;
+ }
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ CFWL_MsgKey ms;
+ ms.m_dwCmd = FWL_MSGKEYCMD_Char;
+ ms.m_dwFlags = dwFlags;
+ ms.m_dwKeyCode = dwChar;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_DWORD CXFA_FFField::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
+ if (m_pNormalWidget) {
+ FX_FLOAT ffx = fx, ffy = fy;
+ FWLToClient(ffx, ffy);
+ FX_DWORD dwWidgetHit = m_pNormalWidget->HitTest(ffx, ffy);
+ if (dwWidgetHit != FWL_WGTHITTEST_Unknown) {
+ return FWL_WGTHITTEST_Client;
+ }
+ }
+ CFX_RectF rtBox;
+ GetRectWithoutRotate(rtBox);
+ if (!rtBox.Contains(fx, fy)) {
+ return FWL_WGTHITTEST_Unknown;
+ }
+ if (m_rtCaption.Contains(fx, fy)) {
+ return FWL_WGTHITTEST_Titlebar;
+ }
+ return FWL_WGTHITTEST_Border;
+}
+FX_BOOL CXFA_FFField::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) {
+ return TRUE;
+}
+FX_BOOL CXFA_FFField::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFX_RectF rtWidget;
+ m_pNormalWidget->GetWidgetRect(rtWidget);
+ if (rtWidget.Contains(fx, fy)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+void CXFA_FFField::LayoutCaption() {
+ CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
+ if (!pCapTextLayout) {
+ return;
+ }
+ CFX_SizeF size;
+ size.Set(m_rtCaption.width, m_rtCaption.height);
+ FX_FLOAT fHeight = 0;
+ pCapTextLayout->Layout(size, &fHeight);
+ if (m_rtCaption.height < fHeight) {
+ m_rtCaption.height = fHeight;
+ }
+}
+void CXFA_FFField::RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix) {
+ CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
+ if (!pCapTextLayout) {
+ return;
+ }
+ CXFA_Caption caption = m_pDataAcc->GetCaption();
+ if (caption.IsExistInXML() &&
+ caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) {
+ if (!pCapTextLayout->IsLoaded()) {
+ CFX_SizeF size;
+ size.Set(m_rtCaption.width, m_rtCaption.height);
+ pCapTextLayout->Layout(size);
+ }
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ CFX_RectF rtClip = m_rtCaption;
+ rtClip.Intersect(rtWidget);
+ CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top);
+ if (pMatrix) {
+ pMatrix->TransformRect(rtClip);
+ mt.Concat(*pMatrix);
+ }
+ pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
+ }
+}
+FX_BOOL CXFA_FFField::ProcessCommittedData() {
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ if (!IsDataChanged()) {
+ return FALSE;
+ }
+ if (CalculateOverride() != 1) {
+ return FALSE;
+ }
+ if (!CommitData()) {
+ return FALSE;
+ }
+ m_pDocView->SetChangeMark();
+ m_pDocView->AddValidateWidget(m_pDataAcc);
+ return TRUE;
+}
+int32_t CXFA_FFField::CalculateOverride() {
+ CXFA_WidgetAcc* pAcc = m_pDataAcc->GetExclGroup();
+ if (!pAcc) {
+ return CalculateWidgetAcc(m_pDataAcc);
+ }
+ if (CalculateWidgetAcc(pAcc) == 0) {
+ return 0;
+ }
+ CXFA_Node* pNode = pAcc->GetExclGroupFirstMember();
+ if (!pNode) {
+ return 1;
+ }
+ CXFA_WidgetAcc* pWidgetAcc = NULL;
+ while (pNode) {
+ pWidgetAcc = (CXFA_WidgetAcc*)pNode->GetWidgetData();
+ if (!pWidgetAcc) {
+ return 1;
+ }
+ if (CalculateWidgetAcc(pWidgetAcc) == 0) {
+ return 0;
+ }
+ pNode = pWidgetAcc->GetExclGroupNextMember(pNode);
+ }
+ return 1;
+}
+int32_t CXFA_FFField::CalculateWidgetAcc(CXFA_WidgetAcc* pAcc) {
+ CXFA_Calculate calc = pAcc->GetCalculate();
+ if (!calc) {
+ return 1;
+ }
+ XFA_VERSION version = pAcc->GetDoc()->GetXFADoc()->GetCurVersionMode();
+ if (calc) {
+ int32_t iOverride = calc.GetOverride();
+ switch (iOverride) {
+ case XFA_ATTRIBUTEENUM_Error: {
+ if (version <= XFA_VERSION_204) {
+ return 1;
+ }
+ IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider();
+ if (pAppProvider) {
+ CFX_WideString wsMessage;
+ CFX_WideString wsWarning;
+ pAppProvider->LoadString(XFA_IDS_NotModifyField, wsWarning);
+ wsMessage += wsWarning;
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_CalcOverride, wsTitle);
+ pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_OK);
+ }
+ }
+ return 0;
+ case XFA_ATTRIBUTEENUM_Warning: {
+ if (version <= XFA_VERSION_204) {
+ CXFA_Script script = calc.GetScript();
+ if (!script) {
+ return 1;
+ }
+ CFX_WideString wsExpression;
+ script.GetExpression(wsExpression);
+ if (wsExpression.IsEmpty()) {
+ return 1;
+ }
+ }
+ if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return 1;
+ }
+ IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider();
+ if (pAppProvider) {
+ CFX_WideString wsMessage;
+ calc.GetMessageText(wsMessage);
+ if (!wsMessage.IsEmpty()) {
+ wsMessage += L"\r\n";
+ }
+ CFX_WideString wsWarning;
+ pAppProvider->LoadString(XFA_IDS_ModifyField, wsWarning);
+ wsMessage += wsWarning;
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_CalcOverride, wsTitle);
+ if (pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_YesNo) == XFA_IDYes) {
+ pAcc->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
+ return 1;
+ }
+ }
+ return 0;
+ }
+ case XFA_ATTRIBUTEENUM_Ignore:
+ return 0;
+ case XFA_ATTRIBUTEENUM_Disabled:
+ pAcc->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
+ default:
+ return 1;
+ }
+ }
+ return 1;
+}
+FX_BOOL CXFA_FFField::CommitData() {
+ return FALSE;
+}
+FX_BOOL CXFA_FFField::IsDataChanged() {
+ return FALSE;
+}
+void CXFA_FFField::TranslateFWLMessage(CFWL_Message* pMessage) {
+ GetApp()->GetWidgetMgrDelegate()->OnProcessMessageToForm(pMessage);
+}
+int32_t CXFA_FFField::OnProcessMessage(CFWL_Message* pMessage) {
+ return FWL_ERR_Succeeded;
+}
+FWL_ERR CXFA_FFField::OnProcessEvent(CFWL_Event* pEvent) {
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ switch (dwEventID) {
+ case FWL_EVTHASH_Mouse: {
+ CFWL_EvtMouse* event = (CFWL_EvtMouse*)pEvent;
+ if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseEnter) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_MouseEnter;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseEnter, &eParam);
+ } else if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_MouseExit;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseExit, &eParam);
+ } else if (event->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_MouseDown;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseDown, &eParam);
+ } else if (event->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_MouseUp;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_MouseUp, &eParam);
+ }
+ break;
+ }
+ case FWL_EVTHASH_Click: {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Click;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
+ break;
+ }
+ default: {}
+ }
+ return FWL_ERR_Succeeded;
+}
+FWL_ERR CXFA_FFField::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ return FWL_ERR_Succeeded;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_fffield.h b/xfa/src/fxfa/src/app/xfa_fffield.h
index 4f7b5957cd..7b7d6a738d 100644
--- a/xfa/src/fxfa/src/app/xfa_fffield.h
+++ b/xfa/src/fxfa/src/app/xfa_fffield.h
@@ -1,92 +1,92 @@
-// 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 _FXFA_FORMFILLER_FIELD_IMP_H
-#define _FXFA_FORMFILLER_FIELD_IMP_H
-#define XFA_MINUI_HEIGHT 4.32f
-#define XFA_DEFAULTUI_HEIGHT 2.0f
-class CXFA_TextLayout;
-class CXFA_FFField : public CXFA_FFWidget, public IFWL_WidgetDelegate {
- public:
- CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFField();
-
- virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus = FALSE);
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual FX_BOOL IsLoaded();
- virtual FX_BOOL LoadWidget();
- virtual void UnloadWidget();
- virtual FX_BOOL PerformLayout();
- virtual void UpdateFWL();
- FX_DWORD UpdateUIProperty();
- virtual FX_BOOL OnMouseEnter();
- virtual FX_BOOL OnMouseExit();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
-
- virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget);
- virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
- virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
- virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
- virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);
- virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);
-
- protected:
- virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
- virtual void SetFWLRect();
- void SetFWLThemeProvider();
- CFWL_Widget* GetNormalWidget() { return m_pNormalWidget; }
- void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy);
- void LayoutCaption();
- void RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL);
-
- int32_t CalculateOverride();
- int32_t CalculateWidgetAcc(CXFA_WidgetAcc* pAcc);
- FX_BOOL ProcessCommittedData();
- virtual FX_BOOL CommitData();
- virtual FX_BOOL IsDataChanged();
- void DrawHighlight(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- FX_BOOL bEllipse = FALSE);
- void DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix);
- void TranslateFWLMessage(CFWL_Message* pMessage);
- void CapPlacement();
- void CapTopBottomPlacement(CXFA_Caption caption,
- const CFX_RectF& rtWidget,
- int32_t iCapPlacement);
- void CapLeftRightPlacement(CXFA_Caption caption,
- const CFX_RectF& rtWidget,
- int32_t iCapPlacement);
- void SetEditScrollOffset();
-
- public:
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-
- protected:
- CFWL_Widget* m_pNormalWidget;
- CFX_RectF m_rtUI;
- CFX_RectF m_rtCaption;
-};
-#endif
+// 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 _FXFA_FORMFILLER_FIELD_IMP_H
+#define _FXFA_FORMFILLER_FIELD_IMP_H
+#define XFA_MINUI_HEIGHT 4.32f
+#define XFA_DEFAULTUI_HEIGHT 2.0f
+class CXFA_TextLayout;
+class CXFA_FFField : public CXFA_FFWidget, public IFWL_WidgetDelegate {
+ public:
+ CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFField();
+
+ virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus = FALSE);
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual FX_BOOL IsLoaded();
+ virtual FX_BOOL LoadWidget();
+ virtual void UnloadWidget();
+ virtual FX_BOOL PerformLayout();
+ virtual void UpdateFWL();
+ FX_DWORD UpdateUIProperty();
+ virtual FX_BOOL OnMouseEnter();
+ virtual FX_BOOL OnMouseExit();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+
+ virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget);
+ virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
+ virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
+ virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
+ virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);
+ virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);
+
+ protected:
+ virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
+ virtual void SetFWLRect();
+ void SetFWLThemeProvider();
+ CFWL_Widget* GetNormalWidget() { return m_pNormalWidget; }
+ void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy);
+ void LayoutCaption();
+ void RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL);
+
+ int32_t CalculateOverride();
+ int32_t CalculateWidgetAcc(CXFA_WidgetAcc* pAcc);
+ FX_BOOL ProcessCommittedData();
+ virtual FX_BOOL CommitData();
+ virtual FX_BOOL IsDataChanged();
+ void DrawHighlight(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ FX_BOOL bEllipse = FALSE);
+ void DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix);
+ void TranslateFWLMessage(CFWL_Message* pMessage);
+ void CapPlacement();
+ void CapTopBottomPlacement(CXFA_Caption caption,
+ const CFX_RectF& rtWidget,
+ int32_t iCapPlacement);
+ void CapLeftRightPlacement(CXFA_Caption caption,
+ const CFX_RectF& rtWidget,
+ int32_t iCapPlacement);
+ void SetEditScrollOffset();
+
+ public:
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+ CFWL_Widget* m_pNormalWidget;
+ CFX_RectF m_rtUI;
+ CFX_RectF m_rtCaption;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffimage.cpp b/xfa/src/fxfa/src/app/xfa_ffimage.cpp
index 3b6396b224..61affae6d2 100644
--- a/xfa/src/fxfa/src/app/xfa_ffimage.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffimage.cpp
@@ -1,67 +1,67 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffdraw.h"
-#include "xfa_ffimage.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffapp.h"
-CXFA_FFImage::CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFDraw(pPageView, pDataAcc) {}
-CXFA_FFImage::~CXFA_FFImage() {
- CXFA_FFImage::UnloadWidget();
-}
-FX_BOOL CXFA_FFImage::IsLoaded() {
- return GetDataAcc()->GetImageImage() != NULL;
-}
-FX_BOOL CXFA_FFImage::LoadWidget() {
- if (GetDataAcc()->GetImageImage()) {
- return TRUE;
- }
- GetDataAcc()->LoadImageImage();
- return CXFA_FFDraw::LoadWidget();
-}
-void CXFA_FFImage::UnloadWidget() {
- GetDataAcc()->SetImageImage(NULL);
-}
-void CXFA_FFImage::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- if (CFX_DIBitmap* pDIBitmap = GetDataAcc()->GetImageImage()) {
- CFX_RectF rtImage;
- GetRectWithoutRotate(rtImage);
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- XFA_RectWidthoutMargin(rtImage, mgWidget);
- }
- int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left;
- int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- iHorzAlign = para.GetHorizontalAlign();
- iVertAlign = para.GetVerticalAlign();
- }
- CXFA_Value value = m_pDataAcc->GetFormValue();
- CXFA_Image imageObj = value.GetImage();
- int32_t iAspect = imageObj.GetAspect();
- int32_t iImageXDpi = 0;
- int32_t iImageYDpi = 0;
- m_pDataAcc->GetImageDpi(iImageXDpi, iImageYDpi);
- XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi,
- iImageYDpi, iHorzAlign, iVertAlign);
- }
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffdraw.h"
+#include "xfa_ffimage.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffapp.h"
+CXFA_FFImage::CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFDraw(pPageView, pDataAcc) {}
+CXFA_FFImage::~CXFA_FFImage() {
+ CXFA_FFImage::UnloadWidget();
+}
+FX_BOOL CXFA_FFImage::IsLoaded() {
+ return GetDataAcc()->GetImageImage() != NULL;
+}
+FX_BOOL CXFA_FFImage::LoadWidget() {
+ if (GetDataAcc()->GetImageImage()) {
+ return TRUE;
+ }
+ GetDataAcc()->LoadImageImage();
+ return CXFA_FFDraw::LoadWidget();
+}
+void CXFA_FFImage::UnloadWidget() {
+ GetDataAcc()->SetImageImage(NULL);
+}
+void CXFA_FFImage::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ if (CFX_DIBitmap* pDIBitmap = GetDataAcc()->GetImageImage()) {
+ CFX_RectF rtImage;
+ GetRectWithoutRotate(rtImage);
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ XFA_RectWidthoutMargin(rtImage, mgWidget);
+ }
+ int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left;
+ int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ iHorzAlign = para.GetHorizontalAlign();
+ iVertAlign = para.GetVerticalAlign();
+ }
+ CXFA_Value value = m_pDataAcc->GetFormValue();
+ CXFA_Image imageObj = value.GetImage();
+ int32_t iAspect = imageObj.GetAspect();
+ int32_t iImageXDpi = 0;
+ int32_t iImageYDpi = 0;
+ m_pDataAcc->GetImageDpi(iImageXDpi, iImageYDpi);
+ XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi,
+ iImageYDpi, iHorzAlign, iVertAlign);
+ }
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffimage.h b/xfa/src/fxfa/src/app/xfa_ffimage.h
index 98bc63e667..1cc47b5973 100644
--- a/xfa/src/fxfa/src/app/xfa_ffimage.h
+++ b/xfa/src/fxfa/src/app/xfa_ffimage.h
@@ -1,21 +1,21 @@
-// 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 _XFA_DRAW_IMAGE_IMP_H
-#define _XFA_DRAW_IMAGE_IMP_H
-class CXFA_FFImage : public CXFA_FFDraw {
- public:
- CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFImage();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual FX_BOOL IsLoaded();
- virtual FX_BOOL LoadWidget();
- virtual void UnloadWidget();
-};
-#endif
+// 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 _XFA_DRAW_IMAGE_IMP_H
+#define _XFA_DRAW_IMAGE_IMP_H
+class CXFA_FFImage : public CXFA_FFDraw {
+ public:
+ CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFImage();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual FX_BOOL IsLoaded();
+ virtual FX_BOOL LoadWidget();
+ virtual void UnloadWidget();
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp b/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp
index 01088354ac..e3329a9869 100644
--- a/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp
@@ -1,183 +1,183 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffimageedit.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffdoc.h"
-CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
-CXFA_FFImageEdit::~CXFA_FFImageEdit() {
- CXFA_FFImageEdit::UnloadWidget();
-}
-FX_BOOL CXFA_FFImageEdit::LoadWidget() {
- CFWL_PictureBox* pPictureBox = new CFWL_PictureBox;
- if (pPictureBox) {
- pPictureBox->Initialize();
- }
- m_pNormalWidget = (CFWL_Widget*)pPictureBox;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pOldDelegate = pPictureBox->SetDelegate(this);
- CXFA_FFField::LoadWidget();
- if (m_pDataAcc->GetImageEditImage() != NULL) {
- return TRUE;
- }
- UpdateFWLData();
- return TRUE;
-}
-void CXFA_FFImageEdit::UnloadWidget() {
- m_pDataAcc->SetImageEditImage(NULL);
- CXFA_FFField::UnloadWidget();
-}
-void CXFA_FFImageEdit::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
- RenderCaption(pGS, &mtRotate);
- if (CFX_DIBitmap* pDIBitmap = m_pDataAcc->GetImageEditImage()) {
- CFX_RectF rtImage;
- m_pNormalWidget->GetWidgetRect(rtImage);
- int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left;
- int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- iHorzAlign = para.GetHorizontalAlign();
- iVertAlign = para.GetVerticalAlign();
- }
- int32_t iAspect = XFA_ATTRIBUTEENUM_Fit;
- if (CXFA_Value value = m_pDataAcc->GetFormValue()) {
- if (CXFA_Image imageObj = value.GetImage()) {
- iAspect = imageObj.GetAspect();
- }
- }
- int32_t iImageXDpi = 0;
- int32_t iImageYDpi = 0;
- m_pDataAcc->GetImageEditDpi(iImageXDpi, iImageYDpi);
- XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi,
- iImageYDpi, iHorzAlign, iVertAlign);
- }
-}
-FX_BOOL CXFA_FFImageEdit::OnLButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- if (!PtInActiveRect(fx, fy)) {
- return FALSE;
- }
- SetButtonDown(TRUE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- FWLToClient(ms.m_fx, ms.m_fy);
- TranslateFWLMessage(&ms);
- IXFA_AppProvider* pAppProvider = GetAppProvider();
- if (!pAppProvider) {
- return TRUE;
- }
- CFX_WideString wsTitle;
- CFX_WideString wsFilter;
- pAppProvider->LoadString(XFA_IDS_ImageFilter, wsFilter);
- CFX_WideStringArray wsPathArray;
- pAppProvider->ShowFileDialog(wsTitle, wsFilter, wsPathArray);
- int32_t iSize = wsPathArray.GetSize();
- if (iSize < 1) {
- return TRUE;
- }
- CFX_WideString wsFilePath = wsPathArray[0];
- FX_STRSIZE nLen = wsFilePath.GetLength();
- FX_STRSIZE nIndex = nLen - 1;
- while (nIndex > 0 && wsFilePath[nIndex] != '.') {
- nIndex--;
- }
- if (nIndex <= 0) {
- return TRUE;
- }
- CFX_WideString wsContentType(L"image/");
- wsContentType += wsFilePath.Right(nLen - nIndex - 1);
- wsContentType.MakeLower();
- FXCODEC_IMAGE_TYPE eImageType = XFA_GetImageType(wsContentType);
- if (eImageType == FXCODEC_IMAGE_UNKNOWN) {
- return TRUE;
- }
- CFX_WideString wsImage;
- IFX_FileRead* pFileRead = FX_CreateFileRead(wsFilePath);
- if (pFileRead != NULL) {
- int32_t nDataSize = pFileRead->GetSize();
- if (nDataSize > 0) {
- CFX_ByteString bsBuf;
- FX_CHAR* pImageBuffer = bsBuf.GetBuffer(nDataSize);
- pFileRead->ReadBlock(pImageBuffer, 0, nDataSize);
- bsBuf.ReleaseBuffer();
- if (!bsBuf.IsEmpty()) {
- FX_CHAR* pData = XFA_Base64Encode(bsBuf, nDataSize);
- wsImage = CFX_WideString::FromLocal(pData);
- if (pData != NULL) {
- FX_Free(pData);
- }
- }
- }
- m_pDataAcc->SetImageEditImage(NULL);
- pFileRead->Release();
- }
- m_pDataAcc->SetImageEdit(wsContentType, CFX_WideStringC(), wsImage);
- m_pDataAcc->LoadImageEditImage();
- AddInvalidateRect();
- m_pDocView->SetChangeMark();
- return TRUE;
-}
-void CXFA_FFImageEdit::SetFWLRect() {
- if (!m_pNormalWidget) {
- return;
- }
- CFX_RectF rtUIMargin;
- m_pDataAcc->GetUIMargin(rtUIMargin);
- CFX_RectF rtImage(m_rtUI);
- rtImage.Deflate(rtUIMargin.left, rtUIMargin.top, rtUIMargin.width,
- rtUIMargin.height);
- m_pNormalWidget->SetWidgetRect(rtImage);
-}
-FX_BOOL CXFA_FFImageEdit::CommitData() {
- return TRUE;
-}
-FX_BOOL CXFA_FFImageEdit::UpdateFWLData() {
- m_pDataAcc->SetImageEditImage(NULL);
- m_pDataAcc->LoadImageEditImage();
- return TRUE;
-}
-int32_t CXFA_FFImageEdit::OnProcessMessage(CFWL_Message* pMessage) {
- return m_pOldDelegate->OnProcessMessage(pMessage);
-}
-FWL_ERR CXFA_FFImageEdit::OnProcessEvent(CFWL_Event* pEvent) {
- CXFA_FFField::OnProcessEvent(pEvent);
- return m_pOldDelegate->OnProcessEvent(pEvent);
-}
-FWL_ERR CXFA_FFImageEdit::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffimageedit.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffdoc.h"
+CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
+CXFA_FFImageEdit::~CXFA_FFImageEdit() {
+ CXFA_FFImageEdit::UnloadWidget();
+}
+FX_BOOL CXFA_FFImageEdit::LoadWidget() {
+ CFWL_PictureBox* pPictureBox = new CFWL_PictureBox;
+ if (pPictureBox) {
+ pPictureBox->Initialize();
+ }
+ m_pNormalWidget = (CFWL_Widget*)pPictureBox;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pOldDelegate = pPictureBox->SetDelegate(this);
+ CXFA_FFField::LoadWidget();
+ if (m_pDataAcc->GetImageEditImage() != NULL) {
+ return TRUE;
+ }
+ UpdateFWLData();
+ return TRUE;
+}
+void CXFA_FFImageEdit::UnloadWidget() {
+ m_pDataAcc->SetImageEditImage(NULL);
+ CXFA_FFField::UnloadWidget();
+}
+void CXFA_FFImageEdit::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
+ RenderCaption(pGS, &mtRotate);
+ if (CFX_DIBitmap* pDIBitmap = m_pDataAcc->GetImageEditImage()) {
+ CFX_RectF rtImage;
+ m_pNormalWidget->GetWidgetRect(rtImage);
+ int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left;
+ int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ iHorzAlign = para.GetHorizontalAlign();
+ iVertAlign = para.GetVerticalAlign();
+ }
+ int32_t iAspect = XFA_ATTRIBUTEENUM_Fit;
+ if (CXFA_Value value = m_pDataAcc->GetFormValue()) {
+ if (CXFA_Image imageObj = value.GetImage()) {
+ iAspect = imageObj.GetAspect();
+ }
+ }
+ int32_t iImageXDpi = 0;
+ int32_t iImageYDpi = 0;
+ m_pDataAcc->GetImageEditDpi(iImageXDpi, iImageYDpi);
+ XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi,
+ iImageYDpi, iHorzAlign, iVertAlign);
+ }
+}
+FX_BOOL CXFA_FFImageEdit::OnLButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ if (!PtInActiveRect(fx, fy)) {
+ return FALSE;
+ }
+ SetButtonDown(TRUE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ TranslateFWLMessage(&ms);
+ IXFA_AppProvider* pAppProvider = GetAppProvider();
+ if (!pAppProvider) {
+ return TRUE;
+ }
+ CFX_WideString wsTitle;
+ CFX_WideString wsFilter;
+ pAppProvider->LoadString(XFA_IDS_ImageFilter, wsFilter);
+ CFX_WideStringArray wsPathArray;
+ pAppProvider->ShowFileDialog(wsTitle, wsFilter, wsPathArray);
+ int32_t iSize = wsPathArray.GetSize();
+ if (iSize < 1) {
+ return TRUE;
+ }
+ CFX_WideString wsFilePath = wsPathArray[0];
+ FX_STRSIZE nLen = wsFilePath.GetLength();
+ FX_STRSIZE nIndex = nLen - 1;
+ while (nIndex > 0 && wsFilePath[nIndex] != '.') {
+ nIndex--;
+ }
+ if (nIndex <= 0) {
+ return TRUE;
+ }
+ CFX_WideString wsContentType(L"image/");
+ wsContentType += wsFilePath.Right(nLen - nIndex - 1);
+ wsContentType.MakeLower();
+ FXCODEC_IMAGE_TYPE eImageType = XFA_GetImageType(wsContentType);
+ if (eImageType == FXCODEC_IMAGE_UNKNOWN) {
+ return TRUE;
+ }
+ CFX_WideString wsImage;
+ IFX_FileRead* pFileRead = FX_CreateFileRead(wsFilePath);
+ if (pFileRead != NULL) {
+ int32_t nDataSize = pFileRead->GetSize();
+ if (nDataSize > 0) {
+ CFX_ByteString bsBuf;
+ FX_CHAR* pImageBuffer = bsBuf.GetBuffer(nDataSize);
+ pFileRead->ReadBlock(pImageBuffer, 0, nDataSize);
+ bsBuf.ReleaseBuffer();
+ if (!bsBuf.IsEmpty()) {
+ FX_CHAR* pData = XFA_Base64Encode(bsBuf, nDataSize);
+ wsImage = CFX_WideString::FromLocal(pData);
+ if (pData != NULL) {
+ FX_Free(pData);
+ }
+ }
+ }
+ m_pDataAcc->SetImageEditImage(NULL);
+ pFileRead->Release();
+ }
+ m_pDataAcc->SetImageEdit(wsContentType, CFX_WideStringC(), wsImage);
+ m_pDataAcc->LoadImageEditImage();
+ AddInvalidateRect();
+ m_pDocView->SetChangeMark();
+ return TRUE;
+}
+void CXFA_FFImageEdit::SetFWLRect() {
+ if (!m_pNormalWidget) {
+ return;
+ }
+ CFX_RectF rtUIMargin;
+ m_pDataAcc->GetUIMargin(rtUIMargin);
+ CFX_RectF rtImage(m_rtUI);
+ rtImage.Deflate(rtUIMargin.left, rtUIMargin.top, rtUIMargin.width,
+ rtUIMargin.height);
+ m_pNormalWidget->SetWidgetRect(rtImage);
+}
+FX_BOOL CXFA_FFImageEdit::CommitData() {
+ return TRUE;
+}
+FX_BOOL CXFA_FFImageEdit::UpdateFWLData() {
+ m_pDataAcc->SetImageEditImage(NULL);
+ m_pDataAcc->LoadImageEditImage();
+ return TRUE;
+}
+int32_t CXFA_FFImageEdit::OnProcessMessage(CFWL_Message* pMessage) {
+ return m_pOldDelegate->OnProcessMessage(pMessage);
+}
+FWL_ERR CXFA_FFImageEdit::OnProcessEvent(CFWL_Event* pEvent) {
+ CXFA_FFField::OnProcessEvent(pEvent);
+ return m_pOldDelegate->OnProcessEvent(pEvent);
+}
+FWL_ERR CXFA_FFImageEdit::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffimageedit.h b/xfa/src/fxfa/src/app/xfa_ffimageedit.h
index b6b031da1a..388585fe0a 100644
--- a/xfa/src/fxfa/src/app/xfa_ffimageedit.h
+++ b/xfa/src/fxfa/src/app/xfa_ffimageedit.h
@@ -1,32 +1,32 @@
-// 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 _FXFA_FORMFILLER_IMAGEEDIT_IMP_H
-#define _FXFA_FORMFILLER_IMAGEEDIT_IMP_H
-class CXFA_FFImageEdit : public CXFA_FFField {
- public:
- CXFA_FFImageEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFImageEdit();
-
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual FX_BOOL LoadWidget();
- virtual void UnloadWidget();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-
- protected:
- virtual void SetFWLRect();
- virtual FX_BOOL UpdateFWLData();
- virtual FX_BOOL CommitData();
- IFWL_WidgetDelegate* m_pOldDelegate;
-};
-#endif
+// 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 _FXFA_FORMFILLER_IMAGEEDIT_IMP_H
+#define _FXFA_FORMFILLER_IMAGEEDIT_IMP_H
+class CXFA_FFImageEdit : public CXFA_FFField {
+ public:
+ CXFA_FFImageEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFImageEdit();
+
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual FX_BOOL LoadWidget();
+ virtual void UnloadWidget();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+ virtual void SetFWLRect();
+ virtual FX_BOOL UpdateFWLData();
+ virtual FX_BOOL CommitData();
+ IFWL_WidgetDelegate* m_pOldDelegate;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffnotify.cpp b/xfa/src/fxfa/src/app/xfa_ffnotify.cpp
index 9c7875cd3c..a65819de22 100644
--- a/xfa/src/fxfa/src/app/xfa_ffnotify.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffnotify.cpp
@@ -1,657 +1,657 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffwidgethandler.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpushbutton.h"
-#include "xfa_ffcheckbutton.h"
-#include "xfa_ffchoicelist.h"
-#include "xfa_ffimageedit.h"
-#include "xfa_fftextedit.h"
-#include "xfa_ffbarcode.h"
-#include "xfa_ffdraw.h"
-#include "xfa_fftext.h"
-#include "xfa_ffpath.h"
-#include "xfa_ffimage.h"
-#include "xfa_ffexclgroup.h"
-#include "xfa_ffsubform.h"
-#include "xfa_ffsignature.h"
-#include "xfa_ffapp.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffwidgetacc.h"
-#include "xfa_ffnotify.h"
-
-static void XFA_FFDeleteWidgetAcc(void* pData) {
- delete static_cast<CXFA_WidgetAcc*>(pData);
-}
-static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADeleteWidgetAcc = {
- XFA_FFDeleteWidgetAcc, NULL};
-CXFA_FFNotify::CXFA_FFNotify(CXFA_FFDoc* pDoc) : m_pDoc(pDoc) {}
-CXFA_FFNotify::~CXFA_FFNotify() {}
-void CXFA_FFNotify::OnPageEvent(IXFA_LayoutPage* pSender,
- XFA_PAGEEVENT eEvent,
- void* pParam) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pSender->GetLayout());
- if (!pDocView) {
- return;
- }
- pDocView->OnPageEvent(pSender, eEvent, (int32_t)(uintptr_t)pParam);
-}
-void CXFA_FFNotify::OnNodeEvent(CXFA_Node* pSender,
- XFA_NODEEVENT eEvent,
- void* pParam,
- void* pParam2,
- void* pParam3,
- void* pParam4) {
- switch (eEvent) {
- case XFA_NODEEVENT_Ready:
- OnNodeReady(pSender);
- break;
- case XFA_NODEEVENT_ValueChanging:
- OnValueChanging(pSender, pParam, pParam2);
- break;
- case XFA_NODEEVENT_ValueChanged:
- OnValueChanged(pSender, pParam, pParam2, pParam3, pParam4);
- break;
- case XFA_NODEEVENT_ChildAdded:
- OnChildAdded(pSender, pParam, pParam2);
- break;
- case XFA_NODEEVENT_ChildRemoved:
- OnChildRemoved(pSender, pParam, pParam2);
- break;
- }
-}
-void CXFA_FFNotify::OnWidgetDataEvent(CXFA_WidgetData* pSender,
- FX_DWORD dwEvent,
- void* pParam,
- void* pAdditional,
- void* pAdditional2) {
- CXFA_WidgetAcc* pWidgetAcc = static_cast<CXFA_WidgetAcc*>(pSender);
- switch (dwEvent) {
- case XFA_WIDGETEVENT_ListItemAdded: {
- if (pWidgetAcc->GetUIType() != XFA_ELEMENT_ChoiceList) {
- return;
- }
- FX_BOOL bStaticNotify = pWidgetAcc->GetDocView()->IsStaticNotify();
- CXFA_FFWidget* pWidget = pWidgetAcc->GetNextWidget(NULL);
- if (!pWidget) {
- if (bStaticNotify) {
- pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
- pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemAdded, pParam,
- pAdditional);
- }
- return;
- }
- while (pWidget) {
- if (pWidget->IsLoaded()) {
- if (pWidgetAcc->IsListBox()) {
- static_cast<CXFA_FFListBox*>(pWidget)
- ->InsertItem((const CFX_WideStringC&)(const FX_WCHAR*)pParam,
- (int32_t)(uintptr_t)pAdditional2);
- } else {
- static_cast<CXFA_FFComboBox*>(pWidget)
- ->InsertItem((const CFX_WideStringC&)(const FX_WCHAR*)pParam,
- (int32_t)(uintptr_t)pAdditional2);
- }
- }
- if (bStaticNotify) {
- pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
- pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemAdded, pParam,
- pAdditional);
- }
- pWidget = pWidgetAcc->GetNextWidget(pWidget);
- }
- } break;
- case XFA_WIDGETEVENT_ListItemRemoved: {
- if (pWidgetAcc->GetUIType() != XFA_ELEMENT_ChoiceList) {
- return;
- }
- FX_BOOL bStaticNotify = pWidgetAcc->GetDocView()->IsStaticNotify();
- CXFA_FFWidget* pWidget = pWidgetAcc->GetNextWidget(NULL);
- if (!pWidget) {
- if (bStaticNotify) {
- pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
- pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemRemoved, pParam,
- pAdditional);
- }
- return;
- }
- while (pWidget) {
- if (pWidget->IsLoaded()) {
- if (pWidgetAcc->IsListBox()) {
- static_cast<CXFA_FFListBox*>(pWidget)
- ->DeleteItem((int32_t)(uintptr_t)pParam);
- } else {
- static_cast<CXFA_FFComboBox*>(pWidget)
- ->DeleteItem((int32_t)(uintptr_t)pParam);
- }
- }
- if (bStaticNotify) {
- pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
- pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemRemoved, pParam,
- pAdditional);
- }
- pWidget = pWidgetAcc->GetNextWidget(pWidget);
- }
- } break;
- }
-}
-CXFA_LayoutItem* CXFA_FFNotify::OnCreateLayoutItem(CXFA_Node* pNode) {
- IXFA_DocLayout* pLayout = m_pDoc->GetXFADoc()->GetDocLayout();
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
- XFA_ELEMENT eType = pNode->GetClassID();
- if (eType == XFA_ELEMENT_PageArea) {
- return new CXFA_FFPageView(pDocView, pNode);
- }
- if (eType == XFA_ELEMENT_ContentArea) {
- return new CXFA_ContainerLayoutItem(pNode);
- }
- CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData());
- if (!pAcc) {
- return new CXFA_ContentLayoutItem(pNode);
- }
- CXFA_FFPageView* pPageView = NULL;
- CXFA_FFWidget* pWidget = NULL;
- switch (pAcc->GetUIType()) {
- case XFA_ELEMENT_Barcode:
- pWidget = new CXFA_FFBarcode(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Button:
- pWidget = new CXFA_FFPushButton(pPageView, pAcc);
- break;
- case XFA_ELEMENT_CheckButton:
- pWidget = new CXFA_FFCheckButton(pPageView, pAcc);
- break;
- case XFA_ELEMENT_ChoiceList: {
- if (pAcc->IsListBox()) {
- pWidget = new CXFA_FFListBox(pPageView, pAcc);
- } else {
- pWidget = new CXFA_FFComboBox(pPageView, pAcc);
- }
- } break;
- case XFA_ELEMENT_DateTimeEdit:
- pWidget = new CXFA_FFDateTimeEdit(pPageView, pAcc);
- break;
- case XFA_ELEMENT_ImageEdit:
- pWidget = new CXFA_FFImageEdit(pPageView, pAcc);
- break;
- case XFA_ELEMENT_NumericEdit:
- pWidget = new CXFA_FFNumericEdit(pPageView, pAcc);
- break;
- case XFA_ELEMENT_PasswordEdit:
- pWidget = new CXFA_FFPasswordEdit(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Signature:
- pWidget = new CXFA_FFSignature(pPageView, pAcc);
- break;
- case XFA_ELEMENT_TextEdit:
- pWidget = new CXFA_FFTextEdit(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Arc:
- pWidget = new CXFA_FFArc(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Line:
- pWidget = new CXFA_FFLine(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Rectangle:
- pWidget = new CXFA_FFRectangle(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Text:
- pWidget = new CXFA_FFText(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Image:
- pWidget = new CXFA_FFImage(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Draw:
- pWidget = new CXFA_FFDraw(pPageView, pAcc);
- break;
- case XFA_ELEMENT_Subform:
- pWidget = new CXFA_FFSubForm(pPageView, pAcc);
- break;
- case XFA_ELEMENT_ExclGroup:
- pWidget = new CXFA_FFExclGroup(pPageView, pAcc);
- break;
- case XFA_ELEMENT_DefaultUi:
- default:
- pWidget = NULL;
- break;
- }
- if (!pWidget) {
- return NULL;
- }
- pWidget->SetDocView(pDocView);
- return pWidget;
-}
-void CXFA_FFNotify::OnLayoutEvent(IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- XFA_LAYOUTEVENT eEvent,
- void* pParam,
- void* pParam2) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
- if (!pDocView || !XFA_GetWidgetFromLayoutItem(pSender)) {
- return;
- }
- switch (eEvent) {
- case XFA_LAYOUTEVENT_ItemAdded:
- OnLayoutItemAdd(pDocView, pLayout, pSender, pParam, pParam2);
- break;
- case XFA_LAYOUTEVENT_ItemRemoving:
- OnLayoutItemRemoving(pDocView, pLayout, pSender, pParam, pParam2);
- break;
- case XFA_LAYOUTEVENT_RectChanged:
- OnLayoutItemRectChanged(pDocView, pLayout, pSender, pParam, pParam2);
- break;
- case XFA_LAYOUTEVENT_StatusChanged:
- OnLayoutItemStatustChanged(pDocView, pLayout, pSender, pParam, pParam2);
- break;
- }
-}
-void CXFA_FFNotify::StartFieldDrawLayout(CXFA_Node* pItem,
- FX_FLOAT& fCalcWidth,
- FX_FLOAT& fCalcHeight) {
- CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pItem->GetWidgetData());
- if (!pAcc) {
- return;
- }
- pAcc->StartWidgetLayout(fCalcWidth, fCalcHeight);
-}
-FX_BOOL CXFA_FFNotify::FindSplitPos(CXFA_Node* pItem,
- int32_t iBlockIndex,
- FX_FLOAT& fCalcHeightPos) {
- CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pItem->GetWidgetData());
- if (!pAcc) {
- return FALSE;
- }
- return (XFA_LAYOUTRESULT)pAcc->FindSplitPos(iBlockIndex, fCalcHeightPos);
-}
-FX_BOOL CXFA_FFNotify::RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem) {
- FX_BOOL bRet = FALSE;
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return bRet;
- }
- CXFA_WidgetAcc* pWidgetAcc =
- static_cast<CXFA_WidgetAcc*>(pFormItem->GetWidgetData());
- if (!pWidgetAcc) {
- return bRet;
- }
- CXFA_EventParam EventParam;
- EventParam.m_eType = XFA_EVENT_Unknown;
- FXJSE_HVALUE pRetValue = NULL;
- int32_t iRet =
- pWidgetAcc->ExecuteScript(CXFA_Script(pScript), &EventParam, &pRetValue);
- if (iRet == XFA_EVENTERROR_Sucess && pRetValue) {
- bRet = FXJSE_Value_ToBoolean(pRetValue);
- FXJSE_Value_Release(pRetValue);
- }
- return bRet;
-}
-int32_t CXFA_FFNotify::ExecEventByDeepFirst(CXFA_Node* pFormNode,
- XFA_EVENTTYPE eEventType,
- FX_BOOL bIsFormReady,
- FX_BOOL bRecursive,
- CXFA_WidgetAcc* pExclude) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return XFA_EVENTERROR_NotExist;
- }
- return pDocView->ExecEventActivityByDeepFirst(
- pFormNode, eEventType, bIsFormReady, bRecursive,
- pExclude ? pExclude->GetNode() : NULL);
-}
-void CXFA_FFNotify::AddCalcValidate(CXFA_Node* pNode) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- CXFA_WidgetAcc* pWidgetAcc =
- static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData());
- if (!pWidgetAcc) {
- return;
- }
- pDocView->AddCalculateWidgetAcc(pWidgetAcc);
- pDocView->AddValidateWidget(pWidgetAcc);
-}
-IXFA_Doc* CXFA_FFNotify::GetHDOC() {
- return m_pDoc;
-}
-IXFA_DocProvider* CXFA_FFNotify::GetDocProvider() {
- return m_pDoc->GetDocProvider();
-}
-IXFA_AppProvider* CXFA_FFNotify::GetAppProvider() {
- return m_pDoc->GetApp()->GetAppProvider();
-}
-IXFA_WidgetHandler* CXFA_FFNotify::GetWidgetHandler() {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- return pDocView ? pDocView->GetWidgetHandler() : NULL;
-}
-IXFA_Widget* CXFA_FFNotify::GetHWidget(CXFA_LayoutItem* pLayoutItem) {
- return XFA_GetWidgetFromLayoutItem(pLayoutItem);
-}
-void CXFA_FFNotify::OpenDropDownList(IXFA_Widget* hWidget) {
- CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(hWidget);
- if (pWidget->GetDataAcc()->GetUIType() != XFA_ELEMENT_ChoiceList) {
- return;
- }
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- pDocView->LockUpdate();
- static_cast<CXFA_FFComboBox*>(pWidget)->OpenDropDownList();
- pDocView->UnlockUpdate();
- pDocView->UpdateDocView();
-}
-CFX_WideString CXFA_FFNotify::GetCurrentDateTime() {
- CFX_Unitime dataTime;
- dataTime.Now();
- CFX_WideString wsDateTime;
- wsDateTime.Format(L"%d%02d%02dT%02d%02d%02d", dataTime.GetYear(),
- dataTime.GetMonth(), dataTime.GetDay(), dataTime.GetHour(),
- dataTime.GetMinute(), dataTime.GetSecond());
- return wsDateTime;
-}
-void CXFA_FFNotify::ResetData(CXFA_WidgetData* pWidgetData) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- pDocView->ResetWidgetData(static_cast<CXFA_WidgetAcc*>(pWidgetData));
-}
-int32_t CXFA_FFNotify::GetLayoutStatus() {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- return pDocView ? pDocView->GetLayoutStatus() : 0;
-}
-void CXFA_FFNotify::RunNodeInitialize(CXFA_Node* pNode) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- pDocView->AddNewFormNode(pNode);
-}
-void CXFA_FFNotify::RunSubformIndexChange(CXFA_Node* pSubformNode) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- pDocView->AddIndexChangedSubform(pSubformNode);
-}
-CXFA_Node* CXFA_FFNotify::GetFocusWidgetNode() {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return NULL;
- }
- CXFA_WidgetAcc* pAcc = pDocView->GetFocusWidgetAcc();
- return pAcc ? pAcc->GetNode() : NULL;
-}
-void CXFA_FFNotify::SetFocusWidgetNode(CXFA_Node* pNode) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- CXFA_WidgetAcc* pAcc =
- pNode ? static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData()) : nullptr;
- pDocView->SetFocusWidgetAcc(pAcc);
-}
-void CXFA_FFNotify::OnNodeReady(CXFA_Node* pNode) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- XFA_ELEMENT iType = pNode->GetClassID();
- if (XFA_IsCreateWidget(iType)) {
- CXFA_WidgetAcc* pAcc =
- new CXFA_WidgetAcc(pDocView, static_cast<CXFA_Node*>(pNode));
- pNode->SetObject(XFA_ATTRIBUTE_WidgetData, pAcc, &gs_XFADeleteWidgetAcc);
- return;
- }
- switch (iType) {
- case XFA_ELEMENT_BindItems:
- pDocView->m_bindItems.Add(pNode);
- break;
- case XFA_ELEMENT_Validate: {
- pNode->SetFlag(XFA_NODEFLAG_NeedsInitApp, TRUE, FALSE);
- } break;
- default:
- break;
- }
-}
-void CXFA_FFNotify::OnValueChanging(CXFA_Node* pSender,
- void* pParam,
- void* pParam2) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- if (pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End) {
- return;
- }
- FX_DWORD dwPacket = pSender->GetPacketID();
- if (dwPacket & XFA_XDPPACKET_Datasets) {
- } else if (pSender->IsFormContainer()) {
- XFA_ATTRIBUTE eAttr = (XFA_ATTRIBUTE)(uintptr_t)pParam;
- if (eAttr == XFA_ATTRIBUTE_Presence) {
- CXFA_WidgetAcc* pWidgetAcc =
- static_cast<CXFA_WidgetAcc*>(pSender->GetWidgetData());
- if (!pWidgetAcc) {
- return;
- }
- CXFA_FFWidget* pWidget = NULL;
- while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != NULL) {
- if (pWidget->IsLoaded()) {
- pWidget->AddInvalidateRect();
- }
- }
- }
- }
-}
-void CXFA_FFNotify::OnValueChanged(CXFA_Node* pSender,
- void* pParam,
- void* pParam2,
- void* pParam3,
- void* pParam4) {
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- FX_DWORD dwPacket = pSender->GetPacketID();
- XFA_ATTRIBUTE eAttr = (XFA_ATTRIBUTE)(uintptr_t)pParam;
- if (dwPacket & XFA_XDPPACKET_Form) {
- CXFA_Node* pParentNode = static_cast<CXFA_Node*>(pParam3);
- CXFA_Node* pWidgetNode = static_cast<CXFA_Node*>(pParam4);
- XFA_ELEMENT ePType = pParentNode->GetClassID();
- FX_BOOL bIsContainerNode = pParentNode->IsContainerNode();
- CXFA_WidgetAcc* pWidgetAcc =
- static_cast<CXFA_WidgetAcc*>(pWidgetNode->GetWidgetData());
- if (!pWidgetAcc) {
- return;
- }
- FX_BOOL bUpdateProperty = FALSE;
- pDocView->SetChangeMark();
- switch (ePType) {
- case XFA_ELEMENT_Caption: {
- CXFA_TextLayout* pCapOut = pWidgetAcc->GetCaptionTextLayout();
- if (!pCapOut) {
- return;
- }
- pCapOut->Unload();
- } break;
- case XFA_ELEMENT_Ui:
- case XFA_ELEMENT_Para:
- bUpdateProperty = TRUE;
- break;
- case XFA_ELEMENT_Font:
- case XFA_ELEMENT_Margin:
- case XFA_ELEMENT_Value:
- case XFA_ELEMENT_Items:
- break;
- default:
- break;
- }
- if (bIsContainerNode && eAttr == XFA_ATTRIBUTE_Access) {
- bUpdateProperty = TRUE;
- FX_BOOL bNotify = pDocView->IsStaticNotify();
- if (bNotify) {
- pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_AccessChanged, NULL, pParam2,
- NULL);
- }
- }
- if (eAttr == XFA_ATTRIBUTE_Value) {
- pDocView->AddCalculateNodeNotify(pSender);
- if (ePType == XFA_ELEMENT_Value || bIsContainerNode) {
- FX_BOOL bNotify = pDocView->IsStaticNotify();
- if (bIsContainerNode) {
- pWidgetAcc->UpdateUIDisplay();
- pDocView->AddCalculateWidgetAcc(pWidgetAcc);
- pDocView->AddValidateWidget(pWidgetAcc);
- } else if (pWidgetNode->GetNodeItem(XFA_NODEITEM_Parent)
- ->GetClassID() == XFA_ELEMENT_ExclGroup) {
- pWidgetAcc->UpdateUIDisplay();
- }
- if (bNotify) {
- pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL,
- NULL, NULL);
- }
- return;
- }
- }
- CXFA_FFWidget* pWidget = NULL;
- while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != NULL) {
- if (!pWidget->IsLoaded()) {
- continue;
- }
- if (bUpdateProperty) {
- pWidget->UpdateWidgetProperty();
- }
- pWidget->PerformLayout();
- pWidget->AddInvalidateRect();
- }
- } else {
- if (eAttr == XFA_ATTRIBUTE_Value) {
- pDocView->AddCalculateNodeNotify(pSender);
- }
- }
-}
-void CXFA_FFNotify::OnChildAdded(CXFA_Node* pSender,
- void* pParam,
- void* pParam2) {
- if (!pSender->IsFormContainer()) {
- return;
- }
- CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
- if (!pDocView) {
- return;
- }
- FX_BOOL bLayoutReady =
- !(pDocView->m_bInLayoutStatus) &&
- (pDocView->GetLayoutStatus() >= XFA_DOCVIEW_LAYOUTSTATUS_End);
- if (bLayoutReady) {
- m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
- }
-}
-void CXFA_FFNotify::OnChildRemoved(CXFA_Node* pSender,
- void* pParam,
- void* pParam2) {
- if (CXFA_FFDocView* pDocView = m_pDoc->GetDocView()) {
- FX_BOOL bLayoutReady =
- !(pDocView->m_bInLayoutStatus) &&
- (pDocView->GetLayoutStatus() >= XFA_DOCVIEW_LAYOUTSTATUS_End);
- if (bLayoutReady) {
- m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
- }
- }
-}
-void CXFA_FFNotify::OnLayoutItemAdd(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2) {
- CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(pSender);
- int32_t iPageIdx = (int32_t)(uintptr_t)pParam;
- IXFA_PageView* pNewPageView = pDocView->GetPageView(iPageIdx);
- FX_DWORD dwStatus = (FX_DWORD)(uintptr_t)pParam2;
- FX_DWORD dwFilter = XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable |
- XFA_WIDGETSTATUS_Printable;
- pWidget->ModifyStatus(dwStatus, dwFilter);
- if (pDocView->GetLayoutStatus() >= XFA_DOCVIEW_LAYOUTSTATUS_End) {
- IXFA_PageView* pPrePageView = pWidget->GetPageView();
- if (pPrePageView != pNewPageView ||
- (dwStatus & (XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable)) ==
- (XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable)) {
- pWidget->SetPageView(pNewPageView);
- m_pDoc->GetDocProvider()->WidgetEvent(pWidget, pWidget->GetDataAcc(),
- XFA_WIDGETEVENT_PostAdded,
- pNewPageView, pPrePageView);
- }
- if ((dwStatus & XFA_WIDGETSTATUS_Visible) == 0) {
- return;
- }
- if (pWidget->IsLoaded()) {
- CFX_RectF rtOld;
- pWidget->GetWidgetRect(rtOld);
- CFX_RectF rtNew = pWidget->ReCacheWidgetRect();
- if (rtOld != rtNew) {
- pWidget->PerformLayout();
- }
- } else {
- pWidget->LoadWidget();
- }
- pWidget->AddInvalidateRect(NULL);
- } else {
- pWidget->SetPageView(pNewPageView);
- }
-}
-void CXFA_FFNotify::OnLayoutItemRemoving(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2) {
- CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(pSender);
- pDocView->DeleteLayoutItem(pWidget);
- if (pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End) {
- return;
- }
- m_pDoc->GetDocProvider()->WidgetEvent(pWidget, pWidget->GetDataAcc(),
- XFA_WIDGETEVENT_PreRemoved, NULL, NULL);
- pWidget->AddInvalidateRect(NULL);
-}
-void CXFA_FFNotify::OnLayoutItemRectChanged(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2) {
-}
-void CXFA_FFNotify::OnLayoutItemStatustChanged(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2) {
- CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(pSender);
- if (!pWidget) {
- return;
- }
- FX_DWORD dwStatus = (FX_DWORD)(uintptr_t)pParam;
- if (dwStatus == 0) {
- CXFA_LayoutItem* pPreItem = pSender->GetPrev();
- if (pPreItem) {
- CXFA_FFWidget* pPreWidget = static_cast<CXFA_FFWidget*>(pPreItem);
- if (pPreWidget) {
- dwStatus = pPreWidget->GetStatus();
- }
- }
- }
- FX_DWORD dwOldStatus = pWidget->GetStatus();
- FX_DWORD dwFilter = XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable |
- XFA_WIDGETSTATUS_Printable;
- if ((dwOldStatus & dwFilter) == dwStatus) {
- return;
- }
- pWidget->ModifyStatus(dwStatus, dwFilter);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffwidgethandler.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpushbutton.h"
+#include "xfa_ffcheckbutton.h"
+#include "xfa_ffchoicelist.h"
+#include "xfa_ffimageedit.h"
+#include "xfa_fftextedit.h"
+#include "xfa_ffbarcode.h"
+#include "xfa_ffdraw.h"
+#include "xfa_fftext.h"
+#include "xfa_ffpath.h"
+#include "xfa_ffimage.h"
+#include "xfa_ffexclgroup.h"
+#include "xfa_ffsubform.h"
+#include "xfa_ffsignature.h"
+#include "xfa_ffapp.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffwidgetacc.h"
+#include "xfa_ffnotify.h"
+
+static void XFA_FFDeleteWidgetAcc(void* pData) {
+ delete static_cast<CXFA_WidgetAcc*>(pData);
+}
+static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADeleteWidgetAcc = {
+ XFA_FFDeleteWidgetAcc, NULL};
+CXFA_FFNotify::CXFA_FFNotify(CXFA_FFDoc* pDoc) : m_pDoc(pDoc) {}
+CXFA_FFNotify::~CXFA_FFNotify() {}
+void CXFA_FFNotify::OnPageEvent(IXFA_LayoutPage* pSender,
+ XFA_PAGEEVENT eEvent,
+ void* pParam) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pSender->GetLayout());
+ if (!pDocView) {
+ return;
+ }
+ pDocView->OnPageEvent(pSender, eEvent, (int32_t)(uintptr_t)pParam);
+}
+void CXFA_FFNotify::OnNodeEvent(CXFA_Node* pSender,
+ XFA_NODEEVENT eEvent,
+ void* pParam,
+ void* pParam2,
+ void* pParam3,
+ void* pParam4) {
+ switch (eEvent) {
+ case XFA_NODEEVENT_Ready:
+ OnNodeReady(pSender);
+ break;
+ case XFA_NODEEVENT_ValueChanging:
+ OnValueChanging(pSender, pParam, pParam2);
+ break;
+ case XFA_NODEEVENT_ValueChanged:
+ OnValueChanged(pSender, pParam, pParam2, pParam3, pParam4);
+ break;
+ case XFA_NODEEVENT_ChildAdded:
+ OnChildAdded(pSender, pParam, pParam2);
+ break;
+ case XFA_NODEEVENT_ChildRemoved:
+ OnChildRemoved(pSender, pParam, pParam2);
+ break;
+ }
+}
+void CXFA_FFNotify::OnWidgetDataEvent(CXFA_WidgetData* pSender,
+ FX_DWORD dwEvent,
+ void* pParam,
+ void* pAdditional,
+ void* pAdditional2) {
+ CXFA_WidgetAcc* pWidgetAcc = static_cast<CXFA_WidgetAcc*>(pSender);
+ switch (dwEvent) {
+ case XFA_WIDGETEVENT_ListItemAdded: {
+ if (pWidgetAcc->GetUIType() != XFA_ELEMENT_ChoiceList) {
+ return;
+ }
+ FX_BOOL bStaticNotify = pWidgetAcc->GetDocView()->IsStaticNotify();
+ CXFA_FFWidget* pWidget = pWidgetAcc->GetNextWidget(NULL);
+ if (!pWidget) {
+ if (bStaticNotify) {
+ pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
+ pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemAdded, pParam,
+ pAdditional);
+ }
+ return;
+ }
+ while (pWidget) {
+ if (pWidget->IsLoaded()) {
+ if (pWidgetAcc->IsListBox()) {
+ static_cast<CXFA_FFListBox*>(pWidget)
+ ->InsertItem((const CFX_WideStringC&)(const FX_WCHAR*)pParam,
+ (int32_t)(uintptr_t)pAdditional2);
+ } else {
+ static_cast<CXFA_FFComboBox*>(pWidget)
+ ->InsertItem((const CFX_WideStringC&)(const FX_WCHAR*)pParam,
+ (int32_t)(uintptr_t)pAdditional2);
+ }
+ }
+ if (bStaticNotify) {
+ pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
+ pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemAdded, pParam,
+ pAdditional);
+ }
+ pWidget = pWidgetAcc->GetNextWidget(pWidget);
+ }
+ } break;
+ case XFA_WIDGETEVENT_ListItemRemoved: {
+ if (pWidgetAcc->GetUIType() != XFA_ELEMENT_ChoiceList) {
+ return;
+ }
+ FX_BOOL bStaticNotify = pWidgetAcc->GetDocView()->IsStaticNotify();
+ CXFA_FFWidget* pWidget = pWidgetAcc->GetNextWidget(NULL);
+ if (!pWidget) {
+ if (bStaticNotify) {
+ pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
+ pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemRemoved, pParam,
+ pAdditional);
+ }
+ return;
+ }
+ while (pWidget) {
+ if (pWidget->IsLoaded()) {
+ if (pWidgetAcc->IsListBox()) {
+ static_cast<CXFA_FFListBox*>(pWidget)
+ ->DeleteItem((int32_t)(uintptr_t)pParam);
+ } else {
+ static_cast<CXFA_FFComboBox*>(pWidget)
+ ->DeleteItem((int32_t)(uintptr_t)pParam);
+ }
+ }
+ if (bStaticNotify) {
+ pWidgetAcc->GetDoc()->GetDocProvider()->WidgetEvent(
+ pWidget, pWidgetAcc, XFA_WIDGETEVENT_ListItemRemoved, pParam,
+ pAdditional);
+ }
+ pWidget = pWidgetAcc->GetNextWidget(pWidget);
+ }
+ } break;
+ }
+}
+CXFA_LayoutItem* CXFA_FFNotify::OnCreateLayoutItem(CXFA_Node* pNode) {
+ IXFA_DocLayout* pLayout = m_pDoc->GetXFADoc()->GetDocLayout();
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
+ XFA_ELEMENT eType = pNode->GetClassID();
+ if (eType == XFA_ELEMENT_PageArea) {
+ return new CXFA_FFPageView(pDocView, pNode);
+ }
+ if (eType == XFA_ELEMENT_ContentArea) {
+ return new CXFA_ContainerLayoutItem(pNode);
+ }
+ CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData());
+ if (!pAcc) {
+ return new CXFA_ContentLayoutItem(pNode);
+ }
+ CXFA_FFPageView* pPageView = NULL;
+ CXFA_FFWidget* pWidget = NULL;
+ switch (pAcc->GetUIType()) {
+ case XFA_ELEMENT_Barcode:
+ pWidget = new CXFA_FFBarcode(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Button:
+ pWidget = new CXFA_FFPushButton(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_CheckButton:
+ pWidget = new CXFA_FFCheckButton(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_ChoiceList: {
+ if (pAcc->IsListBox()) {
+ pWidget = new CXFA_FFListBox(pPageView, pAcc);
+ } else {
+ pWidget = new CXFA_FFComboBox(pPageView, pAcc);
+ }
+ } break;
+ case XFA_ELEMENT_DateTimeEdit:
+ pWidget = new CXFA_FFDateTimeEdit(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_ImageEdit:
+ pWidget = new CXFA_FFImageEdit(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_NumericEdit:
+ pWidget = new CXFA_FFNumericEdit(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_PasswordEdit:
+ pWidget = new CXFA_FFPasswordEdit(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Signature:
+ pWidget = new CXFA_FFSignature(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_TextEdit:
+ pWidget = new CXFA_FFTextEdit(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Arc:
+ pWidget = new CXFA_FFArc(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Line:
+ pWidget = new CXFA_FFLine(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Rectangle:
+ pWidget = new CXFA_FFRectangle(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Text:
+ pWidget = new CXFA_FFText(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Image:
+ pWidget = new CXFA_FFImage(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Draw:
+ pWidget = new CXFA_FFDraw(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_Subform:
+ pWidget = new CXFA_FFSubForm(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_ExclGroup:
+ pWidget = new CXFA_FFExclGroup(pPageView, pAcc);
+ break;
+ case XFA_ELEMENT_DefaultUi:
+ default:
+ pWidget = NULL;
+ break;
+ }
+ if (!pWidget) {
+ return NULL;
+ }
+ pWidget->SetDocView(pDocView);
+ return pWidget;
+}
+void CXFA_FFNotify::OnLayoutEvent(IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ XFA_LAYOUTEVENT eEvent,
+ void* pParam,
+ void* pParam2) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
+ if (!pDocView || !XFA_GetWidgetFromLayoutItem(pSender)) {
+ return;
+ }
+ switch (eEvent) {
+ case XFA_LAYOUTEVENT_ItemAdded:
+ OnLayoutItemAdd(pDocView, pLayout, pSender, pParam, pParam2);
+ break;
+ case XFA_LAYOUTEVENT_ItemRemoving:
+ OnLayoutItemRemoving(pDocView, pLayout, pSender, pParam, pParam2);
+ break;
+ case XFA_LAYOUTEVENT_RectChanged:
+ OnLayoutItemRectChanged(pDocView, pLayout, pSender, pParam, pParam2);
+ break;
+ case XFA_LAYOUTEVENT_StatusChanged:
+ OnLayoutItemStatustChanged(pDocView, pLayout, pSender, pParam, pParam2);
+ break;
+ }
+}
+void CXFA_FFNotify::StartFieldDrawLayout(CXFA_Node* pItem,
+ FX_FLOAT& fCalcWidth,
+ FX_FLOAT& fCalcHeight) {
+ CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pItem->GetWidgetData());
+ if (!pAcc) {
+ return;
+ }
+ pAcc->StartWidgetLayout(fCalcWidth, fCalcHeight);
+}
+FX_BOOL CXFA_FFNotify::FindSplitPos(CXFA_Node* pItem,
+ int32_t iBlockIndex,
+ FX_FLOAT& fCalcHeightPos) {
+ CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pItem->GetWidgetData());
+ if (!pAcc) {
+ return FALSE;
+ }
+ return (XFA_LAYOUTRESULT)pAcc->FindSplitPos(iBlockIndex, fCalcHeightPos);
+}
+FX_BOOL CXFA_FFNotify::RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem) {
+ FX_BOOL bRet = FALSE;
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return bRet;
+ }
+ CXFA_WidgetAcc* pWidgetAcc =
+ static_cast<CXFA_WidgetAcc*>(pFormItem->GetWidgetData());
+ if (!pWidgetAcc) {
+ return bRet;
+ }
+ CXFA_EventParam EventParam;
+ EventParam.m_eType = XFA_EVENT_Unknown;
+ FXJSE_HVALUE pRetValue = NULL;
+ int32_t iRet =
+ pWidgetAcc->ExecuteScript(CXFA_Script(pScript), &EventParam, &pRetValue);
+ if (iRet == XFA_EVENTERROR_Sucess && pRetValue) {
+ bRet = FXJSE_Value_ToBoolean(pRetValue);
+ FXJSE_Value_Release(pRetValue);
+ }
+ return bRet;
+}
+int32_t CXFA_FFNotify::ExecEventByDeepFirst(CXFA_Node* pFormNode,
+ XFA_EVENTTYPE eEventType,
+ FX_BOOL bIsFormReady,
+ FX_BOOL bRecursive,
+ CXFA_WidgetAcc* pExclude) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ return pDocView->ExecEventActivityByDeepFirst(
+ pFormNode, eEventType, bIsFormReady, bRecursive,
+ pExclude ? pExclude->GetNode() : NULL);
+}
+void CXFA_FFNotify::AddCalcValidate(CXFA_Node* pNode) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ CXFA_WidgetAcc* pWidgetAcc =
+ static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData());
+ if (!pWidgetAcc) {
+ return;
+ }
+ pDocView->AddCalculateWidgetAcc(pWidgetAcc);
+ pDocView->AddValidateWidget(pWidgetAcc);
+}
+IXFA_Doc* CXFA_FFNotify::GetHDOC() {
+ return m_pDoc;
+}
+IXFA_DocProvider* CXFA_FFNotify::GetDocProvider() {
+ return m_pDoc->GetDocProvider();
+}
+IXFA_AppProvider* CXFA_FFNotify::GetAppProvider() {
+ return m_pDoc->GetApp()->GetAppProvider();
+}
+IXFA_WidgetHandler* CXFA_FFNotify::GetWidgetHandler() {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ return pDocView ? pDocView->GetWidgetHandler() : NULL;
+}
+IXFA_Widget* CXFA_FFNotify::GetHWidget(CXFA_LayoutItem* pLayoutItem) {
+ return XFA_GetWidgetFromLayoutItem(pLayoutItem);
+}
+void CXFA_FFNotify::OpenDropDownList(IXFA_Widget* hWidget) {
+ CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(hWidget);
+ if (pWidget->GetDataAcc()->GetUIType() != XFA_ELEMENT_ChoiceList) {
+ return;
+ }
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ pDocView->LockUpdate();
+ static_cast<CXFA_FFComboBox*>(pWidget)->OpenDropDownList();
+ pDocView->UnlockUpdate();
+ pDocView->UpdateDocView();
+}
+CFX_WideString CXFA_FFNotify::GetCurrentDateTime() {
+ CFX_Unitime dataTime;
+ dataTime.Now();
+ CFX_WideString wsDateTime;
+ wsDateTime.Format(L"%d%02d%02dT%02d%02d%02d", dataTime.GetYear(),
+ dataTime.GetMonth(), dataTime.GetDay(), dataTime.GetHour(),
+ dataTime.GetMinute(), dataTime.GetSecond());
+ return wsDateTime;
+}
+void CXFA_FFNotify::ResetData(CXFA_WidgetData* pWidgetData) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ pDocView->ResetWidgetData(static_cast<CXFA_WidgetAcc*>(pWidgetData));
+}
+int32_t CXFA_FFNotify::GetLayoutStatus() {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ return pDocView ? pDocView->GetLayoutStatus() : 0;
+}
+void CXFA_FFNotify::RunNodeInitialize(CXFA_Node* pNode) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ pDocView->AddNewFormNode(pNode);
+}
+void CXFA_FFNotify::RunSubformIndexChange(CXFA_Node* pSubformNode) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ pDocView->AddIndexChangedSubform(pSubformNode);
+}
+CXFA_Node* CXFA_FFNotify::GetFocusWidgetNode() {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return NULL;
+ }
+ CXFA_WidgetAcc* pAcc = pDocView->GetFocusWidgetAcc();
+ return pAcc ? pAcc->GetNode() : NULL;
+}
+void CXFA_FFNotify::SetFocusWidgetNode(CXFA_Node* pNode) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ CXFA_WidgetAcc* pAcc =
+ pNode ? static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData()) : nullptr;
+ pDocView->SetFocusWidgetAcc(pAcc);
+}
+void CXFA_FFNotify::OnNodeReady(CXFA_Node* pNode) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ XFA_ELEMENT iType = pNode->GetClassID();
+ if (XFA_IsCreateWidget(iType)) {
+ CXFA_WidgetAcc* pAcc =
+ new CXFA_WidgetAcc(pDocView, static_cast<CXFA_Node*>(pNode));
+ pNode->SetObject(XFA_ATTRIBUTE_WidgetData, pAcc, &gs_XFADeleteWidgetAcc);
+ return;
+ }
+ switch (iType) {
+ case XFA_ELEMENT_BindItems:
+ pDocView->m_bindItems.Add(pNode);
+ break;
+ case XFA_ELEMENT_Validate: {
+ pNode->SetFlag(XFA_NODEFLAG_NeedsInitApp, TRUE, FALSE);
+ } break;
+ default:
+ break;
+ }
+}
+void CXFA_FFNotify::OnValueChanging(CXFA_Node* pSender,
+ void* pParam,
+ void* pParam2) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ if (pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End) {
+ return;
+ }
+ FX_DWORD dwPacket = pSender->GetPacketID();
+ if (dwPacket & XFA_XDPPACKET_Datasets) {
+ } else if (pSender->IsFormContainer()) {
+ XFA_ATTRIBUTE eAttr = (XFA_ATTRIBUTE)(uintptr_t)pParam;
+ if (eAttr == XFA_ATTRIBUTE_Presence) {
+ CXFA_WidgetAcc* pWidgetAcc =
+ static_cast<CXFA_WidgetAcc*>(pSender->GetWidgetData());
+ if (!pWidgetAcc) {
+ return;
+ }
+ CXFA_FFWidget* pWidget = NULL;
+ while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != NULL) {
+ if (pWidget->IsLoaded()) {
+ pWidget->AddInvalidateRect();
+ }
+ }
+ }
+ }
+}
+void CXFA_FFNotify::OnValueChanged(CXFA_Node* pSender,
+ void* pParam,
+ void* pParam2,
+ void* pParam3,
+ void* pParam4) {
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ FX_DWORD dwPacket = pSender->GetPacketID();
+ XFA_ATTRIBUTE eAttr = (XFA_ATTRIBUTE)(uintptr_t)pParam;
+ if (dwPacket & XFA_XDPPACKET_Form) {
+ CXFA_Node* pParentNode = static_cast<CXFA_Node*>(pParam3);
+ CXFA_Node* pWidgetNode = static_cast<CXFA_Node*>(pParam4);
+ XFA_ELEMENT ePType = pParentNode->GetClassID();
+ FX_BOOL bIsContainerNode = pParentNode->IsContainerNode();
+ CXFA_WidgetAcc* pWidgetAcc =
+ static_cast<CXFA_WidgetAcc*>(pWidgetNode->GetWidgetData());
+ if (!pWidgetAcc) {
+ return;
+ }
+ FX_BOOL bUpdateProperty = FALSE;
+ pDocView->SetChangeMark();
+ switch (ePType) {
+ case XFA_ELEMENT_Caption: {
+ CXFA_TextLayout* pCapOut = pWidgetAcc->GetCaptionTextLayout();
+ if (!pCapOut) {
+ return;
+ }
+ pCapOut->Unload();
+ } break;
+ case XFA_ELEMENT_Ui:
+ case XFA_ELEMENT_Para:
+ bUpdateProperty = TRUE;
+ break;
+ case XFA_ELEMENT_Font:
+ case XFA_ELEMENT_Margin:
+ case XFA_ELEMENT_Value:
+ case XFA_ELEMENT_Items:
+ break;
+ default:
+ break;
+ }
+ if (bIsContainerNode && eAttr == XFA_ATTRIBUTE_Access) {
+ bUpdateProperty = TRUE;
+ FX_BOOL bNotify = pDocView->IsStaticNotify();
+ if (bNotify) {
+ pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_AccessChanged, NULL, pParam2,
+ NULL);
+ }
+ }
+ if (eAttr == XFA_ATTRIBUTE_Value) {
+ pDocView->AddCalculateNodeNotify(pSender);
+ if (ePType == XFA_ELEMENT_Value || bIsContainerNode) {
+ FX_BOOL bNotify = pDocView->IsStaticNotify();
+ if (bIsContainerNode) {
+ pWidgetAcc->UpdateUIDisplay();
+ pDocView->AddCalculateWidgetAcc(pWidgetAcc);
+ pDocView->AddValidateWidget(pWidgetAcc);
+ } else if (pWidgetNode->GetNodeItem(XFA_NODEITEM_Parent)
+ ->GetClassID() == XFA_ELEMENT_ExclGroup) {
+ pWidgetAcc->UpdateUIDisplay();
+ }
+ if (bNotify) {
+ pWidgetAcc->NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL,
+ NULL, NULL);
+ }
+ return;
+ }
+ }
+ CXFA_FFWidget* pWidget = NULL;
+ while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != NULL) {
+ if (!pWidget->IsLoaded()) {
+ continue;
+ }
+ if (bUpdateProperty) {
+ pWidget->UpdateWidgetProperty();
+ }
+ pWidget->PerformLayout();
+ pWidget->AddInvalidateRect();
+ }
+ } else {
+ if (eAttr == XFA_ATTRIBUTE_Value) {
+ pDocView->AddCalculateNodeNotify(pSender);
+ }
+ }
+}
+void CXFA_FFNotify::OnChildAdded(CXFA_Node* pSender,
+ void* pParam,
+ void* pParam2) {
+ if (!pSender->IsFormContainer()) {
+ return;
+ }
+ CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
+ if (!pDocView) {
+ return;
+ }
+ FX_BOOL bLayoutReady =
+ !(pDocView->m_bInLayoutStatus) &&
+ (pDocView->GetLayoutStatus() >= XFA_DOCVIEW_LAYOUTSTATUS_End);
+ if (bLayoutReady) {
+ m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
+ }
+}
+void CXFA_FFNotify::OnChildRemoved(CXFA_Node* pSender,
+ void* pParam,
+ void* pParam2) {
+ if (CXFA_FFDocView* pDocView = m_pDoc->GetDocView()) {
+ FX_BOOL bLayoutReady =
+ !(pDocView->m_bInLayoutStatus) &&
+ (pDocView->GetLayoutStatus() >= XFA_DOCVIEW_LAYOUTSTATUS_End);
+ if (bLayoutReady) {
+ m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc);
+ }
+ }
+}
+void CXFA_FFNotify::OnLayoutItemAdd(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2) {
+ CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(pSender);
+ int32_t iPageIdx = (int32_t)(uintptr_t)pParam;
+ IXFA_PageView* pNewPageView = pDocView->GetPageView(iPageIdx);
+ FX_DWORD dwStatus = (FX_DWORD)(uintptr_t)pParam2;
+ FX_DWORD dwFilter = XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable |
+ XFA_WIDGETSTATUS_Printable;
+ pWidget->ModifyStatus(dwStatus, dwFilter);
+ if (pDocView->GetLayoutStatus() >= XFA_DOCVIEW_LAYOUTSTATUS_End) {
+ IXFA_PageView* pPrePageView = pWidget->GetPageView();
+ if (pPrePageView != pNewPageView ||
+ (dwStatus & (XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable)) ==
+ (XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable)) {
+ pWidget->SetPageView(pNewPageView);
+ m_pDoc->GetDocProvider()->WidgetEvent(pWidget, pWidget->GetDataAcc(),
+ XFA_WIDGETEVENT_PostAdded,
+ pNewPageView, pPrePageView);
+ }
+ if ((dwStatus & XFA_WIDGETSTATUS_Visible) == 0) {
+ return;
+ }
+ if (pWidget->IsLoaded()) {
+ CFX_RectF rtOld;
+ pWidget->GetWidgetRect(rtOld);
+ CFX_RectF rtNew = pWidget->ReCacheWidgetRect();
+ if (rtOld != rtNew) {
+ pWidget->PerformLayout();
+ }
+ } else {
+ pWidget->LoadWidget();
+ }
+ pWidget->AddInvalidateRect(NULL);
+ } else {
+ pWidget->SetPageView(pNewPageView);
+ }
+}
+void CXFA_FFNotify::OnLayoutItemRemoving(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2) {
+ CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(pSender);
+ pDocView->DeleteLayoutItem(pWidget);
+ if (pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End) {
+ return;
+ }
+ m_pDoc->GetDocProvider()->WidgetEvent(pWidget, pWidget->GetDataAcc(),
+ XFA_WIDGETEVENT_PreRemoved, NULL, NULL);
+ pWidget->AddInvalidateRect(NULL);
+}
+void CXFA_FFNotify::OnLayoutItemRectChanged(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2) {
+}
+void CXFA_FFNotify::OnLayoutItemStatustChanged(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2) {
+ CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(pSender);
+ if (!pWidget) {
+ return;
+ }
+ FX_DWORD dwStatus = (FX_DWORD)(uintptr_t)pParam;
+ if (dwStatus == 0) {
+ CXFA_LayoutItem* pPreItem = pSender->GetPrev();
+ if (pPreItem) {
+ CXFA_FFWidget* pPreWidget = static_cast<CXFA_FFWidget*>(pPreItem);
+ if (pPreWidget) {
+ dwStatus = pPreWidget->GetStatus();
+ }
+ }
+ }
+ FX_DWORD dwOldStatus = pWidget->GetStatus();
+ FX_DWORD dwFilter = XFA_WIDGETSTATUS_Visible | XFA_WIDGETSTATUS_Viewable |
+ XFA_WIDGETSTATUS_Printable;
+ if ((dwOldStatus & dwFilter) == dwStatus) {
+ return;
+ }
+ pWidget->ModifyStatus(dwStatus, dwFilter);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffnotify.h b/xfa/src/fxfa/src/app/xfa_ffnotify.h
index 6941b0d219..e49fe6579d 100644
--- a/xfa/src/fxfa/src/app/xfa_ffnotify.h
+++ b/xfa/src/fxfa/src/app/xfa_ffnotify.h
@@ -1,95 +1,95 @@
-// 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 _FXFA_FFNOTIFY_H_
-#define _FXFA_FFNOTIFY_H_
-class CXFA_FFNotify : public IXFA_Notify {
- public:
- CXFA_FFNotify(CXFA_FFDoc* pDoc);
- ~CXFA_FFNotify();
-
- virtual void OnPageEvent(IXFA_LayoutPage* pSender,
- XFA_PAGEEVENT eEvent,
- void* pParam = NULL);
-
- virtual void OnNodeEvent(CXFA_Node* pSender,
- XFA_NODEEVENT eEvent,
- void* pParam = NULL,
- void* pParam2 = NULL,
- void* pParam3 = NULL,
- void* pParam4 = NULL);
- virtual void OnWidgetDataEvent(CXFA_WidgetData* pSender,
- FX_DWORD dwEvent,
- void* pParam = NULL,
- void* pAdditional = NULL,
- void* pAdditional2 = NULL);
- virtual CXFA_LayoutItem* OnCreateLayoutItem(CXFA_Node* pNode);
- virtual void OnLayoutEvent(IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- XFA_LAYOUTEVENT eEvent,
- void* pParam = NULL,
- void* pParam2 = NULL);
-
- virtual void StartFieldDrawLayout(CXFA_Node* pItem,
- FX_FLOAT& fCalcWidth,
- FX_FLOAT& fCalcHeight);
- virtual FX_BOOL FindSplitPos(CXFA_Node* pItem,
- int32_t iBlockIndex,
- FX_FLOAT& fCalcHeightPos);
- virtual FX_BOOL RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem);
- virtual int32_t ExecEventByDeepFirst(CXFA_Node* pFormNode,
- XFA_EVENTTYPE eEventType,
- FX_BOOL bIsFormReady = FALSE,
- FX_BOOL bRecursive = TRUE,
- CXFA_WidgetAcc* pExclude = NULL);
- virtual void AddCalcValidate(CXFA_Node* pNode);
- virtual IXFA_Doc* GetHDOC();
- virtual IXFA_DocProvider* GetDocProvider();
- virtual IXFA_AppProvider* GetAppProvider();
- virtual IXFA_WidgetHandler* GetWidgetHandler();
- virtual IXFA_Widget* GetHWidget(CXFA_LayoutItem* pLayoutItem);
- virtual void OpenDropDownList(IXFA_Widget* hWidget);
- virtual CFX_WideString GetCurrentDateTime();
- virtual void ResetData(CXFA_WidgetData* pWidgetData = NULL);
- virtual int32_t GetLayoutStatus();
- virtual void RunNodeInitialize(CXFA_Node* pNode);
- virtual void RunSubformIndexChange(CXFA_Node* pSubformNode);
- virtual CXFA_Node* GetFocusWidgetNode();
- virtual void SetFocusWidgetNode(CXFA_Node* pNode);
-
- protected:
- void OnNodeReady(CXFA_Node* pNode);
- void OnValueChanging(CXFA_Node* pSender, void* pParam, void* pParam2);
- void OnValueChanged(CXFA_Node* pSender,
- void* pParam,
- void* pParam2,
- void* pParam3,
- void* pParam4);
- void OnChildAdded(CXFA_Node* pSender, void* pParam, void* pParam2);
- void OnChildRemoved(CXFA_Node* pSender, void* pParam, void* pParam2);
- void OnLayoutItemAdd(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2);
- void OnLayoutItemRemoving(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2);
- void OnLayoutItemRectChanged(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2);
- void OnLayoutItemStatustChanged(CXFA_FFDocView* pDocView,
- IXFA_DocLayout* pLayout,
- CXFA_LayoutItem* pSender,
- void* pParam,
- void* pParam2);
- CXFA_FFDoc* m_pDoc;
-};
-#endif
+// 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 _FXFA_FFNOTIFY_H_
+#define _FXFA_FFNOTIFY_H_
+class CXFA_FFNotify : public IXFA_Notify {
+ public:
+ CXFA_FFNotify(CXFA_FFDoc* pDoc);
+ ~CXFA_FFNotify();
+
+ virtual void OnPageEvent(IXFA_LayoutPage* pSender,
+ XFA_PAGEEVENT eEvent,
+ void* pParam = NULL);
+
+ virtual void OnNodeEvent(CXFA_Node* pSender,
+ XFA_NODEEVENT eEvent,
+ void* pParam = NULL,
+ void* pParam2 = NULL,
+ void* pParam3 = NULL,
+ void* pParam4 = NULL);
+ virtual void OnWidgetDataEvent(CXFA_WidgetData* pSender,
+ FX_DWORD dwEvent,
+ void* pParam = NULL,
+ void* pAdditional = NULL,
+ void* pAdditional2 = NULL);
+ virtual CXFA_LayoutItem* OnCreateLayoutItem(CXFA_Node* pNode);
+ virtual void OnLayoutEvent(IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ XFA_LAYOUTEVENT eEvent,
+ void* pParam = NULL,
+ void* pParam2 = NULL);
+
+ virtual void StartFieldDrawLayout(CXFA_Node* pItem,
+ FX_FLOAT& fCalcWidth,
+ FX_FLOAT& fCalcHeight);
+ virtual FX_BOOL FindSplitPos(CXFA_Node* pItem,
+ int32_t iBlockIndex,
+ FX_FLOAT& fCalcHeightPos);
+ virtual FX_BOOL RunScript(CXFA_Node* pScript, CXFA_Node* pFormItem);
+ virtual int32_t ExecEventByDeepFirst(CXFA_Node* pFormNode,
+ XFA_EVENTTYPE eEventType,
+ FX_BOOL bIsFormReady = FALSE,
+ FX_BOOL bRecursive = TRUE,
+ CXFA_WidgetAcc* pExclude = NULL);
+ virtual void AddCalcValidate(CXFA_Node* pNode);
+ virtual IXFA_Doc* GetHDOC();
+ virtual IXFA_DocProvider* GetDocProvider();
+ virtual IXFA_AppProvider* GetAppProvider();
+ virtual IXFA_WidgetHandler* GetWidgetHandler();
+ virtual IXFA_Widget* GetHWidget(CXFA_LayoutItem* pLayoutItem);
+ virtual void OpenDropDownList(IXFA_Widget* hWidget);
+ virtual CFX_WideString GetCurrentDateTime();
+ virtual void ResetData(CXFA_WidgetData* pWidgetData = NULL);
+ virtual int32_t GetLayoutStatus();
+ virtual void RunNodeInitialize(CXFA_Node* pNode);
+ virtual void RunSubformIndexChange(CXFA_Node* pSubformNode);
+ virtual CXFA_Node* GetFocusWidgetNode();
+ virtual void SetFocusWidgetNode(CXFA_Node* pNode);
+
+ protected:
+ void OnNodeReady(CXFA_Node* pNode);
+ void OnValueChanging(CXFA_Node* pSender, void* pParam, void* pParam2);
+ void OnValueChanged(CXFA_Node* pSender,
+ void* pParam,
+ void* pParam2,
+ void* pParam3,
+ void* pParam4);
+ void OnChildAdded(CXFA_Node* pSender, void* pParam, void* pParam2);
+ void OnChildRemoved(CXFA_Node* pSender, void* pParam, void* pParam2);
+ void OnLayoutItemAdd(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2);
+ void OnLayoutItemRemoving(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2);
+ void OnLayoutItemRectChanged(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2);
+ void OnLayoutItemStatustChanged(CXFA_FFDocView* pDocView,
+ IXFA_DocLayout* pLayout,
+ CXFA_LayoutItem* pSender,
+ void* pParam,
+ void* pParam2);
+ CXFA_FFDoc* m_pDoc;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffpageview.cpp b/xfa/src/fxfa/src/app/xfa_ffpageview.cpp
index 87fe5cd1b4..aa108a2625 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpageview.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffpageview.cpp
@@ -1,423 +1,423 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffdocview.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpushbutton.h"
-#include "xfa_ffcheckbutton.h"
-#include "xfa_ffchoicelist.h"
-#include "xfa_ffimageedit.h"
-#include "xfa_fftextedit.h"
-CXFA_FFPageView::CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea)
- : CXFA_ContainerLayoutItem(pPageArea),
- m_pDocView(pDocView),
- m_bLoaded(FALSE) {}
-CXFA_FFPageView::~CXFA_FFPageView() {}
-IXFA_DocView* CXFA_FFPageView::GetDocView() {
- return m_pDocView;
-}
-int32_t CXFA_FFPageView::GetPageViewIndex() {
- return GetPageIndex();
-}
-void CXFA_FFPageView::GetPageViewRect(CFX_RectF& rtPage) {
- CFX_SizeF sz;
- GetPageSize(sz);
- rtPage.Set(0, 0, sz);
-}
-void CXFA_FFPageView::GetDisplayMatrix(CFX_Matrix& mt,
- const CFX_Rect& rtDisp,
- int32_t iRotate) {
- CFX_SizeF sz;
- GetPageSize(sz);
- CFX_RectF fdePage;
- fdePage.Set(0, 0, sz.x, sz.y);
- FDE_GetPageMatrix(mt, fdePage, rtDisp, iRotate, 0);
-}
-int32_t CXFA_FFPageView::LoadPageView(IFX_Pause* pPause) {
- if (m_bLoaded) {
- return 100;
- }
- m_bLoaded = TRUE;
- return 100;
-}
-void CXFA_FFPageView::UnloadPageView() {
- if (!m_bLoaded) {
- return;
- }
-}
-FX_BOOL CXFA_FFPageView::IsPageViewLoaded() {
- return m_bLoaded;
-}
-IXFA_Widget* CXFA_FFPageView::GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_bLoaded) {
- return nullptr;
- }
- IXFA_WidgetIterator* pIterator = CreateWidgetIterator();
- CXFA_FFWidget* pWidget = nullptr;
- while ((pWidget = static_cast<CXFA_FFWidget*>(pIterator->MoveToNext()))) {
- if (!(pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
- continue;
- }
- CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
- int32_t type = pAcc->GetClassID();
- if (type != XFA_ELEMENT_Field && type != XFA_ELEMENT_Draw) {
- continue;
- }
- FX_FLOAT fWidgetx = fx;
- FX_FLOAT fWidgety = fy;
- pWidget->Rotate2Normal(fWidgetx, fWidgety);
- FX_DWORD dwFlag = pWidget->OnHitTest(fWidgetx, fWidgety);
- if ((FWL_WGTHITTEST_Client == dwFlag ||
- FWL_WGTHITTEST_HyperLink == dwFlag)) {
- break;
- }
- }
- pIterator->Release();
- return pWidget;
-}
-IXFA_WidgetIterator* CXFA_FFPageView::CreateWidgetIterator(
- FX_DWORD dwTraverseWay,
- FX_DWORD dwWidgetFilter) {
- switch (dwTraverseWay) {
- case XFA_TRAVERSEWAY_Tranvalse:
- return new CXFA_FFTabOrderPageWidgetIterator(this, dwWidgetFilter);
- case XFA_TRAVERSEWAY_Form:
- return new CXFA_FFPageWidgetIterator(this, dwWidgetFilter);
- }
- return NULL;
-}
-static FX_BOOL XFA_PageWidgetFilter(CXFA_FFWidget* pWidget,
- FX_DWORD dwFilter,
- FX_BOOL bTraversal,
- FX_BOOL bIgnorerelevant) {
- CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
- FX_DWORD dwType = dwFilter & XFA_WIDGETFILTER_AllType;
- if ((dwType == XFA_WIDGETFILTER_Field) &&
- (pWidgetAcc->GetClassID() != XFA_ELEMENT_Field)) {
- return FALSE;
- }
- FX_DWORD dwStatus = pWidget->GetStatus();
- if (bTraversal && (dwStatus & XFA_WIDGETSTATUS_Disabled)) {
- return FALSE;
- }
- if (bIgnorerelevant) {
- return (dwStatus & XFA_WIDGETFILTER_Visible) != 0;
- }
- dwFilter &= (XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_Viewable |
- XFA_WIDGETFILTER_Printable);
- return (dwFilter & dwStatus) == dwFilter;
-}
-CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
- FX_DWORD dwFilter) {
- m_pPageView = pPageView;
- m_dwFilter = dwFilter;
- m_sIterator.Init(pPageView);
- m_bIgnorerelevant = ((CXFA_FFDoc*)m_pPageView->GetDocView()->GetDoc())
- ->GetXFADoc()
- ->GetCurVersionMode() < XFA_VERSION_205;
-}
-CXFA_FFPageWidgetIterator::~CXFA_FFPageWidgetIterator() {}
-void CXFA_FFPageWidgetIterator::Reset() {
- m_sIterator.Reset();
-}
-IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToFirst() {
- m_sIterator.Reset();
- for (CXFA_LayoutItem* pLayoutItem = m_sIterator.GetCurrent(); pLayoutItem;
- pLayoutItem = m_sIterator.MoveToNext()) {
- if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) {
- return hWidget;
- }
- }
- return NULL;
-}
-IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToLast() {
- m_sIterator.SetCurrent(NULL);
- return MoveToPrevious();
-}
-IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToNext() {
- for (CXFA_LayoutItem* pLayoutItem = m_sIterator.MoveToNext(); pLayoutItem;
- pLayoutItem = m_sIterator.MoveToNext()) {
- if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) {
- return hWidget;
- }
- }
- return NULL;
-}
-IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToPrevious() {
- for (CXFA_LayoutItem* pLayoutItem = m_sIterator.MoveToPrev(); pLayoutItem;
- pLayoutItem = m_sIterator.MoveToPrev()) {
- if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) {
- return hWidget;
- }
- }
- return NULL;
-}
-IXFA_Widget* CXFA_FFPageWidgetIterator::GetCurrentWidget() {
- CXFA_LayoutItem* pLayoutItem = m_sIterator.GetCurrent();
- return pLayoutItem ? XFA_GetWidgetFromLayoutItem(pLayoutItem) : NULL;
-}
-FX_BOOL CXFA_FFPageWidgetIterator::SetCurrentWidget(IXFA_Widget* hWidget) {
- CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(hWidget);
- return pWidget && m_sIterator.SetCurrent(pWidget);
-}
-IXFA_Widget* CXFA_FFPageWidgetIterator::GetWidget(
- CXFA_LayoutItem* pLayoutItem) {
- if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) {
- if (!XFA_PageWidgetFilter(pWidget, m_dwFilter, FALSE, m_bIgnorerelevant)) {
- return NULL;
- }
- if (!pWidget->IsLoaded() &&
- (pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible) != 0) {
- pWidget->LoadWidget();
- }
- return pWidget;
- }
- return NULL;
-}
-CXFA_FFTabOrderPageWidgetIterator::CXFA_FFTabOrderPageWidgetIterator(
- CXFA_FFPageView* pPageView,
- FX_DWORD dwFilter)
- : m_pPageView(pPageView), m_dwFilter(dwFilter), m_iCurWidget(-1) {
- m_bIgnorerelevant = ((CXFA_FFDoc*)m_pPageView->GetDocView()->GetDoc())
- ->GetXFADoc()
- ->GetCurVersionMode() < XFA_VERSION_205;
- Reset();
-}
-CXFA_FFTabOrderPageWidgetIterator::~CXFA_FFTabOrderPageWidgetIterator() {}
-void CXFA_FFTabOrderPageWidgetIterator::Release() {
- delete this;
-}
-void CXFA_FFTabOrderPageWidgetIterator::Reset() {
- CreateTabOrderWidgetArray();
- m_iCurWidget = -1;
-}
-IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToFirst() {
- if (m_TabOrderWidgetArray.GetSize() > 0) {
- for (int32_t i = 0; i < m_TabOrderWidgetArray.GetSize(); i++) {
- if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
- m_bIgnorerelevant)) {
- m_iCurWidget = i;
- return m_TabOrderWidgetArray[m_iCurWidget];
- }
- }
- }
- return NULL;
-}
-IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToLast() {
- if (m_TabOrderWidgetArray.GetSize() > 0) {
- for (int32_t i = m_TabOrderWidgetArray.GetSize() - 1; i >= 0; i--) {
- if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
- m_bIgnorerelevant)) {
- m_iCurWidget = i;
- return m_TabOrderWidgetArray[m_iCurWidget];
- }
- }
- }
- return NULL;
-}
-IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToNext() {
- for (int32_t i = m_iCurWidget + 1; i < m_TabOrderWidgetArray.GetSize(); i++) {
- if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
- m_bIgnorerelevant)) {
- m_iCurWidget = i;
- return m_TabOrderWidgetArray[m_iCurWidget];
- }
- }
- m_iCurWidget = -1;
- return NULL;
-}
-IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToPrevious() {
- for (int32_t i = m_iCurWidget - 1; i >= 0; i--) {
- if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
- m_bIgnorerelevant)) {
- m_iCurWidget = i;
- return m_TabOrderWidgetArray[m_iCurWidget];
- }
- }
- m_iCurWidget = -1;
- return NULL;
-}
-IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::GetCurrentWidget() {
- if (m_iCurWidget >= 0) {
- return m_TabOrderWidgetArray[m_iCurWidget];
- }
- return NULL;
-}
-FX_BOOL CXFA_FFTabOrderPageWidgetIterator::SetCurrentWidget(
- IXFA_Widget* hWidget) {
- int32_t iWidgetIndex =
- m_TabOrderWidgetArray.Find(static_cast<CXFA_FFWidget*>(hWidget));
- if (iWidgetIndex >= 0) {
- m_iCurWidget = iWidgetIndex;
- return TRUE;
- }
- return FALSE;
-}
-CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetTraverseWidget(
- CXFA_FFWidget* pWidget) {
- CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
- CXFA_Node* pTraversal = pAcc->GetNode()->GetChild(0, XFA_ELEMENT_Traversal);
- if (pTraversal != NULL) {
- CXFA_Node* pTraverse = pTraversal->GetChild(0, XFA_ELEMENT_Traverse);
- if (pTraverse != NULL) {
- CFX_WideString wsTraverseWidgetName;
- if (pTraverse->GetAttribute(XFA_ATTRIBUTE_Ref, wsTraverseWidgetName)) {
- return FindWidgetByName(wsTraverseWidgetName, pWidget);
- }
- }
- }
- return NULL;
-}
-CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::FindWidgetByName(
- const CFX_WideStringC& wsWidgetName,
- CXFA_FFWidget* pRefWidget) {
- return pRefWidget->GetDocView()->GetWidgetByName(wsWidgetName, pRefWidget);
-}
-void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() {
- m_TabOrderWidgetArray.RemoveAll();
- CXFA_WidgetArray SpaceOrderWidgetArray;
- CreateSpaceOrderWidgetArray(SpaceOrderWidgetArray);
- int32_t nWidgetCount = SpaceOrderWidgetArray.GetSize();
- if (nWidgetCount < 1) {
- return;
- }
- CXFA_FFWidget* hWidget = SpaceOrderWidgetArray[0];
- for (; m_TabOrderWidgetArray.GetSize() < nWidgetCount;) {
- if (m_TabOrderWidgetArray.Find(hWidget) < 0) {
- m_TabOrderWidgetArray.Add(hWidget);
- CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc();
- if (pWidgetAcc->GetUIType() == XFA_ELEMENT_ExclGroup) {
- int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget) + 1;
- while (TRUE) {
- CXFA_FFWidget* pRadio =
- SpaceOrderWidgetArray[(iWidgetIndex) % nWidgetCount];
- if (pRadio->GetDataAcc()->GetExclGroup() != pWidgetAcc) {
- break;
- }
- if (m_TabOrderWidgetArray.Find(hWidget) < 0) {
- m_TabOrderWidgetArray.Add(pRadio);
- }
- iWidgetIndex++;
- }
- }
- if (CXFA_FFWidget* hTraverseWidget = GetTraverseWidget(hWidget)) {
- hWidget = hTraverseWidget;
- continue;
- }
- }
- int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget);
- hWidget = SpaceOrderWidgetArray[(iWidgetIndex + 1) % nWidgetCount];
- }
-}
-static int32_t XFA_TabOrderWidgetComparator(const void* phWidget1,
- const void* phWidget2) {
- CXFA_FFWidget* pWidget1 = (*(CXFA_TabParam**)phWidget1)->m_pWidget;
- CXFA_FFWidget* pWidget2 = (*(CXFA_TabParam**)phWidget2)->m_pWidget;
- CFX_RectF rt1, rt2;
- pWidget1->GetWidgetRect(rt1);
- pWidget2->GetWidgetRect(rt2);
- FX_FLOAT x1 = rt1.left, y1 = rt1.top, x2 = rt2.left, y2 = rt2.top;
- if (y1 < y2 || (y1 - y2 < XFA_FLOAT_PERCISION && x1 < x2)) {
- return -1;
- }
- return 1;
-}
-void CXFA_FFTabOrderPageWidgetIterator::OrderContainer(
- CXFA_LayoutItemIterator* sIterator,
- CXFA_LayoutItem* pContainerItem,
- CXFA_TabParam* pContainer,
- FX_BOOL& bCurrentItem,
- FX_BOOL& bContentArea,
- FX_BOOL bMarsterPage) {
- CFX_PtrArray tabParams;
- CXFA_LayoutItem* pSearchItem = sIterator->MoveToNext();
- while (pSearchItem) {
- if (!pSearchItem->IsContentLayoutItem()) {
- bContentArea = TRUE;
- pSearchItem = sIterator->MoveToNext();
- continue;
- }
- if (bMarsterPage && bContentArea) {
- break;
- }
- if (bMarsterPage || bContentArea) {
- CXFA_FFWidget* hWidget = GetWidget(pSearchItem);
- if (!hWidget) {
- pSearchItem = sIterator->MoveToNext();
- continue;
- }
- if (pContainerItem && (pSearchItem->GetParent() != pContainerItem)) {
- bCurrentItem = TRUE;
- break;
- }
- CXFA_TabParam* pParam = new CXFA_TabParam;
- pParam->m_pWidget = hWidget;
- tabParams.Add(pParam);
- if (XFA_IsLayoutElement(pSearchItem->GetFormNode()->GetClassID(), TRUE)) {
- OrderContainer(sIterator, pSearchItem, pParam, bCurrentItem,
- bContentArea, bMarsterPage);
- }
- }
- if (bCurrentItem) {
- pSearchItem = sIterator->GetCurrent();
- bCurrentItem = FALSE;
- } else {
- pSearchItem = sIterator->MoveToNext();
- }
- }
- int32_t iChildren = tabParams.GetSize();
- if (iChildren > 1) {
- FXSYS_qsort(tabParams.GetData(), iChildren, sizeof(void*),
- XFA_TabOrderWidgetComparator);
- }
- for (int32_t iStart = 0; iStart < iChildren; iStart++) {
- CXFA_TabParam* pParam = (CXFA_TabParam*)tabParams[iStart];
- pContainer->m_Children.Add(pParam->m_pWidget);
- if (pParam->m_Children.GetSize() > 0) {
- pContainer->m_Children.Append(pParam->m_Children);
- }
- delete pParam;
- }
- tabParams.RemoveAll();
-}
-void CXFA_FFTabOrderPageWidgetIterator::CreateSpaceOrderWidgetArray(
- CXFA_WidgetArray& WidgetArray) {
- CXFA_LayoutItemIterator sIterator;
- sIterator.Init(m_pPageView);
- CXFA_TabParam* pParam = new CXFA_TabParam;
- FX_BOOL bCurrentItem = FALSE;
- FX_BOOL bContentArea = FALSE;
- OrderContainer(&sIterator, NULL, pParam, bCurrentItem, bContentArea);
- if (pParam->m_Children.GetSize() > 0) {
- WidgetArray.Append(pParam->m_Children);
- }
- sIterator.Reset();
- bCurrentItem = FALSE;
- bContentArea = FALSE;
- pParam->m_Children.RemoveAll();
- OrderContainer(&sIterator, NULL, pParam, bCurrentItem, bContentArea, TRUE);
- if (pParam->m_Children.GetSize() > 0) {
- WidgetArray.Append(pParam->m_Children);
- }
- delete pParam;
-}
-CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetWidget(
- CXFA_LayoutItem* pLayoutItem) {
- if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) {
- if (!pWidget->IsLoaded() &&
- (pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
- pWidget->LoadWidget();
- }
- return pWidget;
- }
- return NULL;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffdocview.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpushbutton.h"
+#include "xfa_ffcheckbutton.h"
+#include "xfa_ffchoicelist.h"
+#include "xfa_ffimageedit.h"
+#include "xfa_fftextedit.h"
+CXFA_FFPageView::CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea)
+ : CXFA_ContainerLayoutItem(pPageArea),
+ m_pDocView(pDocView),
+ m_bLoaded(FALSE) {}
+CXFA_FFPageView::~CXFA_FFPageView() {}
+IXFA_DocView* CXFA_FFPageView::GetDocView() {
+ return m_pDocView;
+}
+int32_t CXFA_FFPageView::GetPageViewIndex() {
+ return GetPageIndex();
+}
+void CXFA_FFPageView::GetPageViewRect(CFX_RectF& rtPage) {
+ CFX_SizeF sz;
+ GetPageSize(sz);
+ rtPage.Set(0, 0, sz);
+}
+void CXFA_FFPageView::GetDisplayMatrix(CFX_Matrix& mt,
+ const CFX_Rect& rtDisp,
+ int32_t iRotate) {
+ CFX_SizeF sz;
+ GetPageSize(sz);
+ CFX_RectF fdePage;
+ fdePage.Set(0, 0, sz.x, sz.y);
+ FDE_GetPageMatrix(mt, fdePage, rtDisp, iRotate, 0);
+}
+int32_t CXFA_FFPageView::LoadPageView(IFX_Pause* pPause) {
+ if (m_bLoaded) {
+ return 100;
+ }
+ m_bLoaded = TRUE;
+ return 100;
+}
+void CXFA_FFPageView::UnloadPageView() {
+ if (!m_bLoaded) {
+ return;
+ }
+}
+FX_BOOL CXFA_FFPageView::IsPageViewLoaded() {
+ return m_bLoaded;
+}
+IXFA_Widget* CXFA_FFPageView::GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_bLoaded) {
+ return nullptr;
+ }
+ IXFA_WidgetIterator* pIterator = CreateWidgetIterator();
+ CXFA_FFWidget* pWidget = nullptr;
+ while ((pWidget = static_cast<CXFA_FFWidget*>(pIterator->MoveToNext()))) {
+ if (!(pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
+ continue;
+ }
+ CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
+ int32_t type = pAcc->GetClassID();
+ if (type != XFA_ELEMENT_Field && type != XFA_ELEMENT_Draw) {
+ continue;
+ }
+ FX_FLOAT fWidgetx = fx;
+ FX_FLOAT fWidgety = fy;
+ pWidget->Rotate2Normal(fWidgetx, fWidgety);
+ FX_DWORD dwFlag = pWidget->OnHitTest(fWidgetx, fWidgety);
+ if ((FWL_WGTHITTEST_Client == dwFlag ||
+ FWL_WGTHITTEST_HyperLink == dwFlag)) {
+ break;
+ }
+ }
+ pIterator->Release();
+ return pWidget;
+}
+IXFA_WidgetIterator* CXFA_FFPageView::CreateWidgetIterator(
+ FX_DWORD dwTraverseWay,
+ FX_DWORD dwWidgetFilter) {
+ switch (dwTraverseWay) {
+ case XFA_TRAVERSEWAY_Tranvalse:
+ return new CXFA_FFTabOrderPageWidgetIterator(this, dwWidgetFilter);
+ case XFA_TRAVERSEWAY_Form:
+ return new CXFA_FFPageWidgetIterator(this, dwWidgetFilter);
+ }
+ return NULL;
+}
+static FX_BOOL XFA_PageWidgetFilter(CXFA_FFWidget* pWidget,
+ FX_DWORD dwFilter,
+ FX_BOOL bTraversal,
+ FX_BOOL bIgnorerelevant) {
+ CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
+ FX_DWORD dwType = dwFilter & XFA_WIDGETFILTER_AllType;
+ if ((dwType == XFA_WIDGETFILTER_Field) &&
+ (pWidgetAcc->GetClassID() != XFA_ELEMENT_Field)) {
+ return FALSE;
+ }
+ FX_DWORD dwStatus = pWidget->GetStatus();
+ if (bTraversal && (dwStatus & XFA_WIDGETSTATUS_Disabled)) {
+ return FALSE;
+ }
+ if (bIgnorerelevant) {
+ return (dwStatus & XFA_WIDGETFILTER_Visible) != 0;
+ }
+ dwFilter &= (XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_Viewable |
+ XFA_WIDGETFILTER_Printable);
+ return (dwFilter & dwStatus) == dwFilter;
+}
+CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
+ FX_DWORD dwFilter) {
+ m_pPageView = pPageView;
+ m_dwFilter = dwFilter;
+ m_sIterator.Init(pPageView);
+ m_bIgnorerelevant = ((CXFA_FFDoc*)m_pPageView->GetDocView()->GetDoc())
+ ->GetXFADoc()
+ ->GetCurVersionMode() < XFA_VERSION_205;
+}
+CXFA_FFPageWidgetIterator::~CXFA_FFPageWidgetIterator() {}
+void CXFA_FFPageWidgetIterator::Reset() {
+ m_sIterator.Reset();
+}
+IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToFirst() {
+ m_sIterator.Reset();
+ for (CXFA_LayoutItem* pLayoutItem = m_sIterator.GetCurrent(); pLayoutItem;
+ pLayoutItem = m_sIterator.MoveToNext()) {
+ if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) {
+ return hWidget;
+ }
+ }
+ return NULL;
+}
+IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToLast() {
+ m_sIterator.SetCurrent(NULL);
+ return MoveToPrevious();
+}
+IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToNext() {
+ for (CXFA_LayoutItem* pLayoutItem = m_sIterator.MoveToNext(); pLayoutItem;
+ pLayoutItem = m_sIterator.MoveToNext()) {
+ if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) {
+ return hWidget;
+ }
+ }
+ return NULL;
+}
+IXFA_Widget* CXFA_FFPageWidgetIterator::MoveToPrevious() {
+ for (CXFA_LayoutItem* pLayoutItem = m_sIterator.MoveToPrev(); pLayoutItem;
+ pLayoutItem = m_sIterator.MoveToPrev()) {
+ if (IXFA_Widget* hWidget = GetWidget(pLayoutItem)) {
+ return hWidget;
+ }
+ }
+ return NULL;
+}
+IXFA_Widget* CXFA_FFPageWidgetIterator::GetCurrentWidget() {
+ CXFA_LayoutItem* pLayoutItem = m_sIterator.GetCurrent();
+ return pLayoutItem ? XFA_GetWidgetFromLayoutItem(pLayoutItem) : NULL;
+}
+FX_BOOL CXFA_FFPageWidgetIterator::SetCurrentWidget(IXFA_Widget* hWidget) {
+ CXFA_FFWidget* pWidget = static_cast<CXFA_FFWidget*>(hWidget);
+ return pWidget && m_sIterator.SetCurrent(pWidget);
+}
+IXFA_Widget* CXFA_FFPageWidgetIterator::GetWidget(
+ CXFA_LayoutItem* pLayoutItem) {
+ if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) {
+ if (!XFA_PageWidgetFilter(pWidget, m_dwFilter, FALSE, m_bIgnorerelevant)) {
+ return NULL;
+ }
+ if (!pWidget->IsLoaded() &&
+ (pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible) != 0) {
+ pWidget->LoadWidget();
+ }
+ return pWidget;
+ }
+ return NULL;
+}
+CXFA_FFTabOrderPageWidgetIterator::CXFA_FFTabOrderPageWidgetIterator(
+ CXFA_FFPageView* pPageView,
+ FX_DWORD dwFilter)
+ : m_pPageView(pPageView), m_dwFilter(dwFilter), m_iCurWidget(-1) {
+ m_bIgnorerelevant = ((CXFA_FFDoc*)m_pPageView->GetDocView()->GetDoc())
+ ->GetXFADoc()
+ ->GetCurVersionMode() < XFA_VERSION_205;
+ Reset();
+}
+CXFA_FFTabOrderPageWidgetIterator::~CXFA_FFTabOrderPageWidgetIterator() {}
+void CXFA_FFTabOrderPageWidgetIterator::Release() {
+ delete this;
+}
+void CXFA_FFTabOrderPageWidgetIterator::Reset() {
+ CreateTabOrderWidgetArray();
+ m_iCurWidget = -1;
+}
+IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToFirst() {
+ if (m_TabOrderWidgetArray.GetSize() > 0) {
+ for (int32_t i = 0; i < m_TabOrderWidgetArray.GetSize(); i++) {
+ if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
+ m_bIgnorerelevant)) {
+ m_iCurWidget = i;
+ return m_TabOrderWidgetArray[m_iCurWidget];
+ }
+ }
+ }
+ return NULL;
+}
+IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToLast() {
+ if (m_TabOrderWidgetArray.GetSize() > 0) {
+ for (int32_t i = m_TabOrderWidgetArray.GetSize() - 1; i >= 0; i--) {
+ if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
+ m_bIgnorerelevant)) {
+ m_iCurWidget = i;
+ return m_TabOrderWidgetArray[m_iCurWidget];
+ }
+ }
+ }
+ return NULL;
+}
+IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToNext() {
+ for (int32_t i = m_iCurWidget + 1; i < m_TabOrderWidgetArray.GetSize(); i++) {
+ if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
+ m_bIgnorerelevant)) {
+ m_iCurWidget = i;
+ return m_TabOrderWidgetArray[m_iCurWidget];
+ }
+ }
+ m_iCurWidget = -1;
+ return NULL;
+}
+IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::MoveToPrevious() {
+ for (int32_t i = m_iCurWidget - 1; i >= 0; i--) {
+ if (XFA_PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, TRUE,
+ m_bIgnorerelevant)) {
+ m_iCurWidget = i;
+ return m_TabOrderWidgetArray[m_iCurWidget];
+ }
+ }
+ m_iCurWidget = -1;
+ return NULL;
+}
+IXFA_Widget* CXFA_FFTabOrderPageWidgetIterator::GetCurrentWidget() {
+ if (m_iCurWidget >= 0) {
+ return m_TabOrderWidgetArray[m_iCurWidget];
+ }
+ return NULL;
+}
+FX_BOOL CXFA_FFTabOrderPageWidgetIterator::SetCurrentWidget(
+ IXFA_Widget* hWidget) {
+ int32_t iWidgetIndex =
+ m_TabOrderWidgetArray.Find(static_cast<CXFA_FFWidget*>(hWidget));
+ if (iWidgetIndex >= 0) {
+ m_iCurWidget = iWidgetIndex;
+ return TRUE;
+ }
+ return FALSE;
+}
+CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetTraverseWidget(
+ CXFA_FFWidget* pWidget) {
+ CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
+ CXFA_Node* pTraversal = pAcc->GetNode()->GetChild(0, XFA_ELEMENT_Traversal);
+ if (pTraversal != NULL) {
+ CXFA_Node* pTraverse = pTraversal->GetChild(0, XFA_ELEMENT_Traverse);
+ if (pTraverse != NULL) {
+ CFX_WideString wsTraverseWidgetName;
+ if (pTraverse->GetAttribute(XFA_ATTRIBUTE_Ref, wsTraverseWidgetName)) {
+ return FindWidgetByName(wsTraverseWidgetName, pWidget);
+ }
+ }
+ }
+ return NULL;
+}
+CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::FindWidgetByName(
+ const CFX_WideStringC& wsWidgetName,
+ CXFA_FFWidget* pRefWidget) {
+ return pRefWidget->GetDocView()->GetWidgetByName(wsWidgetName, pRefWidget);
+}
+void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() {
+ m_TabOrderWidgetArray.RemoveAll();
+ CXFA_WidgetArray SpaceOrderWidgetArray;
+ CreateSpaceOrderWidgetArray(SpaceOrderWidgetArray);
+ int32_t nWidgetCount = SpaceOrderWidgetArray.GetSize();
+ if (nWidgetCount < 1) {
+ return;
+ }
+ CXFA_FFWidget* hWidget = SpaceOrderWidgetArray[0];
+ for (; m_TabOrderWidgetArray.GetSize() < nWidgetCount;) {
+ if (m_TabOrderWidgetArray.Find(hWidget) < 0) {
+ m_TabOrderWidgetArray.Add(hWidget);
+ CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc();
+ if (pWidgetAcc->GetUIType() == XFA_ELEMENT_ExclGroup) {
+ int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget) + 1;
+ while (TRUE) {
+ CXFA_FFWidget* pRadio =
+ SpaceOrderWidgetArray[(iWidgetIndex) % nWidgetCount];
+ if (pRadio->GetDataAcc()->GetExclGroup() != pWidgetAcc) {
+ break;
+ }
+ if (m_TabOrderWidgetArray.Find(hWidget) < 0) {
+ m_TabOrderWidgetArray.Add(pRadio);
+ }
+ iWidgetIndex++;
+ }
+ }
+ if (CXFA_FFWidget* hTraverseWidget = GetTraverseWidget(hWidget)) {
+ hWidget = hTraverseWidget;
+ continue;
+ }
+ }
+ int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget);
+ hWidget = SpaceOrderWidgetArray[(iWidgetIndex + 1) % nWidgetCount];
+ }
+}
+static int32_t XFA_TabOrderWidgetComparator(const void* phWidget1,
+ const void* phWidget2) {
+ CXFA_FFWidget* pWidget1 = (*(CXFA_TabParam**)phWidget1)->m_pWidget;
+ CXFA_FFWidget* pWidget2 = (*(CXFA_TabParam**)phWidget2)->m_pWidget;
+ CFX_RectF rt1, rt2;
+ pWidget1->GetWidgetRect(rt1);
+ pWidget2->GetWidgetRect(rt2);
+ FX_FLOAT x1 = rt1.left, y1 = rt1.top, x2 = rt2.left, y2 = rt2.top;
+ if (y1 < y2 || (y1 - y2 < XFA_FLOAT_PERCISION && x1 < x2)) {
+ return -1;
+ }
+ return 1;
+}
+void CXFA_FFTabOrderPageWidgetIterator::OrderContainer(
+ CXFA_LayoutItemIterator* sIterator,
+ CXFA_LayoutItem* pContainerItem,
+ CXFA_TabParam* pContainer,
+ FX_BOOL& bCurrentItem,
+ FX_BOOL& bContentArea,
+ FX_BOOL bMarsterPage) {
+ CFX_PtrArray tabParams;
+ CXFA_LayoutItem* pSearchItem = sIterator->MoveToNext();
+ while (pSearchItem) {
+ if (!pSearchItem->IsContentLayoutItem()) {
+ bContentArea = TRUE;
+ pSearchItem = sIterator->MoveToNext();
+ continue;
+ }
+ if (bMarsterPage && bContentArea) {
+ break;
+ }
+ if (bMarsterPage || bContentArea) {
+ CXFA_FFWidget* hWidget = GetWidget(pSearchItem);
+ if (!hWidget) {
+ pSearchItem = sIterator->MoveToNext();
+ continue;
+ }
+ if (pContainerItem && (pSearchItem->GetParent() != pContainerItem)) {
+ bCurrentItem = TRUE;
+ break;
+ }
+ CXFA_TabParam* pParam = new CXFA_TabParam;
+ pParam->m_pWidget = hWidget;
+ tabParams.Add(pParam);
+ if (XFA_IsLayoutElement(pSearchItem->GetFormNode()->GetClassID(), TRUE)) {
+ OrderContainer(sIterator, pSearchItem, pParam, bCurrentItem,
+ bContentArea, bMarsterPage);
+ }
+ }
+ if (bCurrentItem) {
+ pSearchItem = sIterator->GetCurrent();
+ bCurrentItem = FALSE;
+ } else {
+ pSearchItem = sIterator->MoveToNext();
+ }
+ }
+ int32_t iChildren = tabParams.GetSize();
+ if (iChildren > 1) {
+ FXSYS_qsort(tabParams.GetData(), iChildren, sizeof(void*),
+ XFA_TabOrderWidgetComparator);
+ }
+ for (int32_t iStart = 0; iStart < iChildren; iStart++) {
+ CXFA_TabParam* pParam = (CXFA_TabParam*)tabParams[iStart];
+ pContainer->m_Children.Add(pParam->m_pWidget);
+ if (pParam->m_Children.GetSize() > 0) {
+ pContainer->m_Children.Append(pParam->m_Children);
+ }
+ delete pParam;
+ }
+ tabParams.RemoveAll();
+}
+void CXFA_FFTabOrderPageWidgetIterator::CreateSpaceOrderWidgetArray(
+ CXFA_WidgetArray& WidgetArray) {
+ CXFA_LayoutItemIterator sIterator;
+ sIterator.Init(m_pPageView);
+ CXFA_TabParam* pParam = new CXFA_TabParam;
+ FX_BOOL bCurrentItem = FALSE;
+ FX_BOOL bContentArea = FALSE;
+ OrderContainer(&sIterator, NULL, pParam, bCurrentItem, bContentArea);
+ if (pParam->m_Children.GetSize() > 0) {
+ WidgetArray.Append(pParam->m_Children);
+ }
+ sIterator.Reset();
+ bCurrentItem = FALSE;
+ bContentArea = FALSE;
+ pParam->m_Children.RemoveAll();
+ OrderContainer(&sIterator, NULL, pParam, bCurrentItem, bContentArea, TRUE);
+ if (pParam->m_Children.GetSize() > 0) {
+ WidgetArray.Append(pParam->m_Children);
+ }
+ delete pParam;
+}
+CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetWidget(
+ CXFA_LayoutItem* pLayoutItem) {
+ if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) {
+ if (!pWidget->IsLoaded() &&
+ (pWidget->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
+ pWidget->LoadWidget();
+ }
+ return pWidget;
+ }
+ return NULL;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffpageview.h b/xfa/src/fxfa/src/app/xfa_ffpageview.h
index ad43c739ec..457650d0ea 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpageview.h
+++ b/xfa/src/fxfa/src/app/xfa_ffpageview.h
@@ -1,107 +1,107 @@
-// 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 _FXFA_FORMFILLER_PAGEVIEW_IMP_H
-#define _FXFA_FORMFILLER_PAGEVIEW_IMP_H
-class CXFA_FFWidget;
-class CXFA_FFDocView;
-class CXFA_FFPageView : public CXFA_ContainerLayoutItem, public IXFA_PageView {
- public:
- CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea);
- ~CXFA_FFPageView() override;
-
- // IFXA_PageView:
- IXFA_DocView* GetDocView() override;
- int32_t GetPageViewIndex() override;
- void GetPageViewRect(CFX_RectF& rtPage) override;
- void GetDisplayMatrix(CFX_Matrix& mt,
- const CFX_Rect& rtDisp,
- int32_t iRotate) override;
- int32_t LoadPageView(IFX_Pause* pPause = NULL) override;
- void UnloadPageView() override;
- IXFA_Widget* GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) override;
- IXFA_WidgetIterator* CreateWidgetIterator(
- FX_DWORD dwTraverseWay = XFA_TRAVERSEWAY_Form,
- FX_DWORD dwWidgetFilter = XFA_WIDGETFILTER_Visible |
- XFA_WIDGETFILTER_Viewable |
- XFA_WIDGETFILTER_AllType) override;
-
- FX_BOOL IsPageViewLoaded();
-
- protected:
- CXFA_FFDocView* m_pDocView;
- FX_BOOL m_bLoaded;
-};
-typedef CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
- CXFA_TraverseStrategy_LayoutItem>
- CXFA_LayoutItemIterator;
-class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator {
- public:
- CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, FX_DWORD dwFilter);
- virtual ~CXFA_FFPageWidgetIterator();
- virtual void Release() { delete this; }
-
- virtual void Reset();
- virtual IXFA_Widget* MoveToFirst();
- virtual IXFA_Widget* MoveToLast();
- virtual IXFA_Widget* MoveToNext();
- virtual IXFA_Widget* MoveToPrevious();
- virtual IXFA_Widget* GetCurrentWidget();
- virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget);
-
- protected:
- IXFA_Widget* GetWidget(CXFA_LayoutItem* pLayoutItem);
- CXFA_FFPageView* m_pPageView;
- IXFA_Widget* m_hCurWidget;
- FX_DWORD m_dwFilter;
- FX_BOOL m_bIgnorerelevant;
- CXFA_LayoutItemIterator m_sIterator;
-};
-typedef CFX_ArrayTemplate<CXFA_FFWidget*> CXFA_WidgetArray;
-class CXFA_TabParam {
- public:
- CXFA_TabParam() : m_pWidget(NULL) {}
- ~CXFA_TabParam() {}
-
- CXFA_FFWidget* m_pWidget;
- CXFA_WidgetArray m_Children;
-};
-class CXFA_FFTabOrderPageWidgetIterator : public IXFA_WidgetIterator {
- public:
- CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView,
- FX_DWORD dwFilter);
- virtual ~CXFA_FFTabOrderPageWidgetIterator();
-
- virtual void Release();
-
- virtual void Reset();
- virtual IXFA_Widget* MoveToFirst();
- virtual IXFA_Widget* MoveToLast();
- virtual IXFA_Widget* MoveToNext();
- virtual IXFA_Widget* MoveToPrevious();
- virtual IXFA_Widget* GetCurrentWidget();
- virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget);
-
- protected:
- CXFA_WidgetArray m_TabOrderWidgetArray;
- CXFA_FFPageView* m_pPageView;
- FX_DWORD m_dwFilter;
- int32_t m_iCurWidget;
- FX_BOOL m_bIgnorerelevant;
- CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget);
- CXFA_FFWidget* FindWidgetByName(const CFX_WideStringC& wsWidgetName,
- CXFA_FFWidget* pRefWidget);
- void CreateTabOrderWidgetArray();
- void CreateSpaceOrderWidgetArray(CXFA_WidgetArray& WidgetArray);
- CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem);
- void OrderContainer(CXFA_LayoutItemIterator* sIterator,
- CXFA_LayoutItem* pContainerItem,
- CXFA_TabParam* pContainer,
- FX_BOOL& bCurrentItem,
- FX_BOOL& bContentArea,
- FX_BOOL bMarsterPage = FALSE);
-};
-#endif
+// 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 _FXFA_FORMFILLER_PAGEVIEW_IMP_H
+#define _FXFA_FORMFILLER_PAGEVIEW_IMP_H
+class CXFA_FFWidget;
+class CXFA_FFDocView;
+class CXFA_FFPageView : public CXFA_ContainerLayoutItem, public IXFA_PageView {
+ public:
+ CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea);
+ ~CXFA_FFPageView() override;
+
+ // IFXA_PageView:
+ IXFA_DocView* GetDocView() override;
+ int32_t GetPageViewIndex() override;
+ void GetPageViewRect(CFX_RectF& rtPage) override;
+ void GetDisplayMatrix(CFX_Matrix& mt,
+ const CFX_Rect& rtDisp,
+ int32_t iRotate) override;
+ int32_t LoadPageView(IFX_Pause* pPause = NULL) override;
+ void UnloadPageView() override;
+ IXFA_Widget* GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) override;
+ IXFA_WidgetIterator* CreateWidgetIterator(
+ FX_DWORD dwTraverseWay = XFA_TRAVERSEWAY_Form,
+ FX_DWORD dwWidgetFilter = XFA_WIDGETFILTER_Visible |
+ XFA_WIDGETFILTER_Viewable |
+ XFA_WIDGETFILTER_AllType) override;
+
+ FX_BOOL IsPageViewLoaded();
+
+ protected:
+ CXFA_FFDocView* m_pDocView;
+ FX_BOOL m_bLoaded;
+};
+typedef CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
+ CXFA_TraverseStrategy_LayoutItem>
+ CXFA_LayoutItemIterator;
+class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator {
+ public:
+ CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, FX_DWORD dwFilter);
+ virtual ~CXFA_FFPageWidgetIterator();
+ virtual void Release() { delete this; }
+
+ virtual void Reset();
+ virtual IXFA_Widget* MoveToFirst();
+ virtual IXFA_Widget* MoveToLast();
+ virtual IXFA_Widget* MoveToNext();
+ virtual IXFA_Widget* MoveToPrevious();
+ virtual IXFA_Widget* GetCurrentWidget();
+ virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget);
+
+ protected:
+ IXFA_Widget* GetWidget(CXFA_LayoutItem* pLayoutItem);
+ CXFA_FFPageView* m_pPageView;
+ IXFA_Widget* m_hCurWidget;
+ FX_DWORD m_dwFilter;
+ FX_BOOL m_bIgnorerelevant;
+ CXFA_LayoutItemIterator m_sIterator;
+};
+typedef CFX_ArrayTemplate<CXFA_FFWidget*> CXFA_WidgetArray;
+class CXFA_TabParam {
+ public:
+ CXFA_TabParam() : m_pWidget(NULL) {}
+ ~CXFA_TabParam() {}
+
+ CXFA_FFWidget* m_pWidget;
+ CXFA_WidgetArray m_Children;
+};
+class CXFA_FFTabOrderPageWidgetIterator : public IXFA_WidgetIterator {
+ public:
+ CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView,
+ FX_DWORD dwFilter);
+ virtual ~CXFA_FFTabOrderPageWidgetIterator();
+
+ virtual void Release();
+
+ virtual void Reset();
+ virtual IXFA_Widget* MoveToFirst();
+ virtual IXFA_Widget* MoveToLast();
+ virtual IXFA_Widget* MoveToNext();
+ virtual IXFA_Widget* MoveToPrevious();
+ virtual IXFA_Widget* GetCurrentWidget();
+ virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget);
+
+ protected:
+ CXFA_WidgetArray m_TabOrderWidgetArray;
+ CXFA_FFPageView* m_pPageView;
+ FX_DWORD m_dwFilter;
+ int32_t m_iCurWidget;
+ FX_BOOL m_bIgnorerelevant;
+ CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget);
+ CXFA_FFWidget* FindWidgetByName(const CFX_WideStringC& wsWidgetName,
+ CXFA_FFWidget* pRefWidget);
+ void CreateTabOrderWidgetArray();
+ void CreateSpaceOrderWidgetArray(CXFA_WidgetArray& WidgetArray);
+ CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem);
+ void OrderContainer(CXFA_LayoutItemIterator* sIterator,
+ CXFA_LayoutItem* pContainerItem,
+ CXFA_TabParam* pContainer,
+ FX_BOOL& bCurrentItem,
+ FX_BOOL& bContentArea,
+ FX_BOOL bMarsterPage = FALSE);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffpath.cpp b/xfa/src/fxfa/src/app/xfa_ffpath.cpp
index 965f9cbe9e..5d0f5be5d1 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpath.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffpath.cpp
@@ -1,158 +1,158 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffdraw.h"
-#include "xfa_ffpath.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffapp.h"
-CXFA_FFLine::CXFA_FFLine(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFDraw(pPageView, pDataAcc) {}
-CXFA_FFLine::~CXFA_FFLine() {}
-void CXFA_FFLine::GetRectFromHand(CFX_RectF& rect,
- int32_t iHand,
- FX_FLOAT fLineWidth) {
- FX_FLOAT fHalfWidth = fLineWidth / 2.0f;
- if (rect.height < 1.0f) {
- switch (iHand) {
- case XFA_ATTRIBUTEENUM_Left:
- rect.top -= fHalfWidth;
- break;
- case XFA_ATTRIBUTEENUM_Right:
- rect.top += fHalfWidth;
- }
- } else if (rect.width < 1.0f) {
- switch (iHand) {
- case XFA_ATTRIBUTEENUM_Left:
- rect.left += fHalfWidth;
- break;
- case XFA_ATTRIBUTEENUM_Right:
- rect.left += fHalfWidth;
- break;
- }
- } else {
- switch (iHand) {
- case XFA_ATTRIBUTEENUM_Left:
- rect.Inflate(fHalfWidth, fHalfWidth);
- break;
- case XFA_ATTRIBUTEENUM_Right:
- rect.Deflate(fHalfWidth, fHalfWidth);
- break;
- }
- }
-}
-void CXFA_FFLine::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CXFA_Value value = m_pDataAcc->GetFormValue();
- if (!value) {
- return;
- }
- CXFA_Line lineObj = value.GetLine();
- FX_ARGB lineColor = 0xFF000000;
- int32_t iStrokeType = 0;
- FX_FLOAT fLineWidth = 1.0f;
- FX_BOOL bSlope = lineObj.GetSlop();
- int32_t iCap = 0;
- CXFA_Edge edge = lineObj.GetEdge();
- if (edge.IsExistInXML()) {
- if (edge.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
- return;
- }
- lineColor = edge.GetColor();
- iStrokeType = edge.GetStrokeType();
- fLineWidth = edge.GetThickness();
- iCap = edge.GetCapType();
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CFX_RectF rtLine;
- GetRectWithoutRotate(rtLine);
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- XFA_RectWidthoutMargin(rtLine, mgWidget);
- }
- GetRectFromHand(rtLine, lineObj.GetHand(), fLineWidth);
- CFX_Path linePath;
- linePath.Create();
- if (bSlope && rtLine.right() > 0.0f && rtLine.bottom() > 0.0f) {
- linePath.AddLine(rtLine.right(), rtLine.top, rtLine.left, rtLine.bottom());
- } else {
- linePath.AddLine(rtLine.left, rtLine.top, rtLine.right(), rtLine.bottom());
- }
- CFX_Color color(lineColor);
- pGS->SaveGraphState();
- pGS->SetLineWidth(fLineWidth, TRUE);
- XFA_StrokeTypeSetLineDash(pGS, iStrokeType, iCap);
- pGS->SetStrokeColor(&color);
- pGS->SetLineCap(XFA_LineCapToFXGE(iCap));
- pGS->StrokePath(&linePath, &mtRotate);
- pGS->RestoreGraphState();
-}
-CXFA_FFArc::CXFA_FFArc(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFDraw(pPageView, pDataAcc) {}
-CXFA_FFArc::~CXFA_FFArc() {}
-void CXFA_FFArc::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CXFA_Value value = m_pDataAcc->GetFormValue();
- if (!value) {
- return;
- }
- CXFA_Arc arcObj = value.GetArc();
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CFX_RectF rtArc;
- GetRectWithoutRotate(rtArc);
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- XFA_RectWidthoutMargin(rtArc, mgWidget);
- }
- DrawBorder(pGS, arcObj, rtArc, &mtRotate);
-}
-CXFA_FFRectangle::CXFA_FFRectangle(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFDraw(pPageView, pDataAcc) {}
-CXFA_FFRectangle::~CXFA_FFRectangle() {}
-void CXFA_FFRectangle::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CXFA_Value value = m_pDataAcc->GetFormValue();
- if (!value) {
- return;
- }
- CXFA_Rectangle rtObj = value.GetRectangle();
- CFX_RectF rect;
- GetRectWithoutRotate(rect);
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- XFA_RectWidthoutMargin(rect, mgWidget);
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- DrawBorder(pGS, rtObj, rect, &mtRotate);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffdraw.h"
+#include "xfa_ffpath.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffapp.h"
+CXFA_FFLine::CXFA_FFLine(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFDraw(pPageView, pDataAcc) {}
+CXFA_FFLine::~CXFA_FFLine() {}
+void CXFA_FFLine::GetRectFromHand(CFX_RectF& rect,
+ int32_t iHand,
+ FX_FLOAT fLineWidth) {
+ FX_FLOAT fHalfWidth = fLineWidth / 2.0f;
+ if (rect.height < 1.0f) {
+ switch (iHand) {
+ case XFA_ATTRIBUTEENUM_Left:
+ rect.top -= fHalfWidth;
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ rect.top += fHalfWidth;
+ }
+ } else if (rect.width < 1.0f) {
+ switch (iHand) {
+ case XFA_ATTRIBUTEENUM_Left:
+ rect.left += fHalfWidth;
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ rect.left += fHalfWidth;
+ break;
+ }
+ } else {
+ switch (iHand) {
+ case XFA_ATTRIBUTEENUM_Left:
+ rect.Inflate(fHalfWidth, fHalfWidth);
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ rect.Deflate(fHalfWidth, fHalfWidth);
+ break;
+ }
+ }
+}
+void CXFA_FFLine::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CXFA_Value value = m_pDataAcc->GetFormValue();
+ if (!value) {
+ return;
+ }
+ CXFA_Line lineObj = value.GetLine();
+ FX_ARGB lineColor = 0xFF000000;
+ int32_t iStrokeType = 0;
+ FX_FLOAT fLineWidth = 1.0f;
+ FX_BOOL bSlope = lineObj.GetSlop();
+ int32_t iCap = 0;
+ CXFA_Edge edge = lineObj.GetEdge();
+ if (edge.IsExistInXML()) {
+ if (edge.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
+ return;
+ }
+ lineColor = edge.GetColor();
+ iStrokeType = edge.GetStrokeType();
+ fLineWidth = edge.GetThickness();
+ iCap = edge.GetCapType();
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CFX_RectF rtLine;
+ GetRectWithoutRotate(rtLine);
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ XFA_RectWidthoutMargin(rtLine, mgWidget);
+ }
+ GetRectFromHand(rtLine, lineObj.GetHand(), fLineWidth);
+ CFX_Path linePath;
+ linePath.Create();
+ if (bSlope && rtLine.right() > 0.0f && rtLine.bottom() > 0.0f) {
+ linePath.AddLine(rtLine.right(), rtLine.top, rtLine.left, rtLine.bottom());
+ } else {
+ linePath.AddLine(rtLine.left, rtLine.top, rtLine.right(), rtLine.bottom());
+ }
+ CFX_Color color(lineColor);
+ pGS->SaveGraphState();
+ pGS->SetLineWidth(fLineWidth, TRUE);
+ XFA_StrokeTypeSetLineDash(pGS, iStrokeType, iCap);
+ pGS->SetStrokeColor(&color);
+ pGS->SetLineCap(XFA_LineCapToFXGE(iCap));
+ pGS->StrokePath(&linePath, &mtRotate);
+ pGS->RestoreGraphState();
+}
+CXFA_FFArc::CXFA_FFArc(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFDraw(pPageView, pDataAcc) {}
+CXFA_FFArc::~CXFA_FFArc() {}
+void CXFA_FFArc::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CXFA_Value value = m_pDataAcc->GetFormValue();
+ if (!value) {
+ return;
+ }
+ CXFA_Arc arcObj = value.GetArc();
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CFX_RectF rtArc;
+ GetRectWithoutRotate(rtArc);
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ XFA_RectWidthoutMargin(rtArc, mgWidget);
+ }
+ DrawBorder(pGS, arcObj, rtArc, &mtRotate);
+}
+CXFA_FFRectangle::CXFA_FFRectangle(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFDraw(pPageView, pDataAcc) {}
+CXFA_FFRectangle::~CXFA_FFRectangle() {}
+void CXFA_FFRectangle::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CXFA_Value value = m_pDataAcc->GetFormValue();
+ if (!value) {
+ return;
+ }
+ CXFA_Rectangle rtObj = value.GetRectangle();
+ CFX_RectF rect;
+ GetRectWithoutRotate(rect);
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ XFA_RectWidthoutMargin(rect, mgWidget);
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ DrawBorder(pGS, rtObj, rect, &mtRotate);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffpath.h b/xfa/src/fxfa/src/app/xfa_ffpath.h
index 808333da27..457abe30d6 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpath.h
+++ b/xfa/src/fxfa/src/app/xfa_ffpath.h
@@ -1,39 +1,39 @@
-// 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 _XFA_DRAW_PATH_IMP_H
-#define _XFA_DRAW_PATH_IMP_H
-class CXFA_FFLine : public CXFA_FFDraw {
- public:
- CXFA_FFLine(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFLine();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
-
- private:
- void GetRectFromHand(CFX_RectF& rect, int32_t iHand, FX_FLOAT fLineWidth);
-};
-class CXFA_FFArc : public CXFA_FFDraw {
- public:
- CXFA_FFArc(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFArc();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
-};
-class CXFA_FFRectangle : public CXFA_FFDraw {
- public:
- CXFA_FFRectangle(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFRectangle();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
-};
-#endif
+// 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 _XFA_DRAW_PATH_IMP_H
+#define _XFA_DRAW_PATH_IMP_H
+class CXFA_FFLine : public CXFA_FFDraw {
+ public:
+ CXFA_FFLine(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFLine();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+
+ private:
+ void GetRectFromHand(CFX_RectF& rect, int32_t iHand, FX_FLOAT fLineWidth);
+};
+class CXFA_FFArc : public CXFA_FFDraw {
+ public:
+ CXFA_FFArc(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFArc();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+};
+class CXFA_FFRectangle : public CXFA_FFDraw {
+ public:
+ CXFA_FFRectangle(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFRectangle();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp b/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp
index 47ad803944..efbde646a6 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp
@@ -1,251 +1,251 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffwidgetacc.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffpushbutton.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffapp.h"
-CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc),
- m_pRolloverTextLayout(NULL),
- m_pDownTextLayout(NULL),
- m_pDownProvider(NULL),
- m_pRollProvider(NULL),
- m_pOldDelegate(NULL) {}
-CXFA_FFPushButton::~CXFA_FFPushButton() {
- CXFA_FFPushButton::UnloadWidget();
-}
-void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- RenderHighlightCaption(pGS, &mtRotate);
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
- mt.Concat(mtRotate);
- GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
- pGS, &mt);
-}
-FX_BOOL CXFA_FFPushButton::LoadWidget() {
- FXSYS_assert(m_pNormalWidget == NULL);
- CFWL_PushButton* pPushButton = CFWL_PushButton::Create();
- if (pPushButton) {
- pPushButton->Initialize();
- }
- m_pOldDelegate = pPushButton->SetDelegate(this);
- m_pNormalWidget = (CFWL_Widget*)pPushButton;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pNormalWidget->LockUpdate();
- UpdateWidgetProperty();
- LoadHighlightCaption();
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFPushButton::UpdateWidgetProperty() {
- FX_DWORD dwStyleEx = 0;
- switch (m_pDataAcc->GetButtonHighlight()) {
- case XFA_ATTRIBUTEENUM_Inverted:
- dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteInverted;
- break;
- case XFA_ATTRIBUTEENUM_Outline:
- dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteOutLine;
- break;
- case XFA_ATTRIBUTEENUM_Push:
- dwStyleEx = XFA_FWL_PSBSTYLEEXT_HilitePush;
- break;
- default:
- break;
- }
- m_pNormalWidget->ModifyStylesEx(dwStyleEx, 0xFFFFFFFF);
-}
-void CXFA_FFPushButton::UnloadWidget() {
- if (m_pRolloverTextLayout) {
- delete m_pRolloverTextLayout;
- m_pRolloverTextLayout = NULL;
- }
- if (m_pDownTextLayout) {
- delete m_pDownTextLayout;
- m_pDownTextLayout = NULL;
- }
- if (m_pDownProvider) {
- delete m_pDownProvider;
- m_pDownProvider = NULL;
- }
- if (m_pRollProvider) {
- delete m_pRollProvider;
- m_pRollProvider = NULL;
- }
- CXFA_FFField::UnloadWidget();
-}
-FX_BOOL CXFA_FFPushButton::PerformLayout() {
- CXFA_FFWidget::PerformLayout();
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- m_rtUI = rtWidget;
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- XFA_RectWidthoutMargin(rtWidget, mgWidget);
- }
- CXFA_Caption caption = m_pDataAcc->GetCaption();
- m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height);
- if (CXFA_Margin mgCap = caption.GetMargin()) {
- XFA_RectWidthoutMargin(m_rtCaption, mgCap);
- }
- LayoutHighlightCaption();
- SetFWLRect();
- if (m_pNormalWidget) {
- m_pNormalWidget->Update();
- }
- return TRUE;
-}
-FX_FLOAT CXFA_FFPushButton::GetLineWidth() {
- CXFA_Border border = m_pDataAcc->GetBorder();
- if (border.IsExistInXML() &&
- (border.GetPresence() == XFA_ATTRIBUTEENUM_Visible)) {
- CXFA_Edge edge = border.GetEdge(0);
- return edge.GetThickness();
- }
- return 0;
-}
-FX_ARGB CXFA_FFPushButton::GetLineColor() {
- return 0xFF000000;
-}
-FX_ARGB CXFA_FFPushButton::GetFillColor() {
- return 0xFFFFFFFF;
-}
-void CXFA_FFPushButton::LoadHighlightCaption() {
- CXFA_Caption caption = m_pDataAcc->GetCaption();
- if (caption.IsExistInXML() &&
- caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
- {
- CFX_WideString wsRollover;
- FX_BOOL bRichText;
- if (m_pDataAcc->GetButtonRollover(wsRollover, bRichText)) {
- if (m_pRollProvider == NULL) {
- m_pRollProvider =
- new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Rollover);
- }
- m_pRolloverTextLayout = new CXFA_TextLayout(m_pRollProvider);
- }
- CFX_WideString wsDown;
- if (m_pDataAcc->GetButtonDown(wsDown, bRichText)) {
- if (m_pDownProvider == NULL) {
- m_pDownProvider =
- new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Down);
- }
- m_pDownTextLayout = new CXFA_TextLayout(m_pDownProvider);
- }
- }
- }
-}
-void CXFA_FFPushButton::LayoutHighlightCaption() {
- CFX_SizeF sz;
- sz.Set(m_rtCaption.width, m_rtCaption.height);
- LayoutCaption();
- if (m_pRolloverTextLayout) {
- m_pRolloverTextLayout->Layout(sz);
- }
- if (m_pDownTextLayout) {
- m_pDownTextLayout->Layout(sz);
- }
-}
-void CXFA_FFPushButton::RenderHighlightCaption(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix) {
- CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
- CXFA_Caption caption = m_pDataAcc->GetCaption();
- if (caption.IsExistInXML() &&
- caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) {
- CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- CFX_RectF rtClip = m_rtCaption;
- rtClip.Intersect(rtWidget);
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top);
- if (pMatrix) {
- pMatrix->TransformRect(rtClip);
- mt.Concat(*pMatrix);
- }
- {
- FX_DWORD dwState = m_pNormalWidget->GetStates();
- if (m_pDownTextLayout && (dwState & FWL_STATE_PSB_Pressed) &&
- (dwState & FWL_STATE_PSB_Hovered)) {
- if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip)) {
- return;
- }
- } else if (m_pRolloverTextLayout && (dwState & FWL_STATE_PSB_Hovered)) {
- if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip)) {
- return;
- }
- }
- }
- if (pCapTextLayout) {
- pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
- }
- }
-}
-int32_t CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) {
- return m_pOldDelegate->OnProcessMessage(pMessage);
-}
-FWL_ERR CXFA_FFPushButton::OnProcessEvent(CFWL_Event* pEvent) {
- m_pOldDelegate->OnProcessEvent(pEvent);
- return CXFA_FFField::OnProcessEvent(pEvent);
-}
-FWL_ERR CXFA_FFPushButton::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteInverted) {
- if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
- (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
- CFX_RectF rtFill;
- m_pNormalWidget->GetWidgetRect(rtFill);
- rtFill.left = rtFill.top = 0;
- FX_FLOAT fLineWith = GetLineWidth();
- rtFill.Deflate(fLineWith, fLineWith);
- CFX_Color cr(FXARGB_MAKE(128, 128, 255, 255));
- pGraphics->SetFillColor(&cr);
- CFX_Path path;
- path.Create();
- path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height);
- pGraphics->FillPath(&path, FXFILL_WINDING, (CFX_Matrix*)pMatrix);
- }
- } else if (m_pNormalWidget->GetStylesEx() &
- XFA_FWL_PSBSTYLEEXT_HiliteOutLine) {
- if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
- (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
- FX_FLOAT fLineWidth = GetLineWidth();
- CFX_Color cr(FXARGB_MAKE(255, 128, 255, 255));
- pGraphics->SetStrokeColor(&cr);
- pGraphics->SetLineWidth(fLineWidth);
- CFX_Path path;
- path.Create();
- CFX_RectF rect;
- m_pNormalWidget->GetWidgetRect(rect);
- path.AddRectangle(0, 0, rect.width, rect.height);
- pGraphics->StrokePath(&path, (CFX_Matrix*)pMatrix);
- }
- } else if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HilitePush) {
- }
- return FWL_ERR_Succeeded;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffwidgetacc.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffpushbutton.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffapp.h"
+CXFA_FFPushButton::CXFA_FFPushButton(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc),
+ m_pRolloverTextLayout(NULL),
+ m_pDownTextLayout(NULL),
+ m_pDownProvider(NULL),
+ m_pRollProvider(NULL),
+ m_pOldDelegate(NULL) {}
+CXFA_FFPushButton::~CXFA_FFPushButton() {
+ CXFA_FFPushButton::UnloadWidget();
+}
+void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ RenderHighlightCaption(pGS, &mtRotate);
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, rtWidget.left, rtWidget.top);
+ mt.Concat(mtRotate);
+ GetApp()->GetWidgetMgrDelegate()->OnDrawWidget(m_pNormalWidget->GetWidget(),
+ pGS, &mt);
+}
+FX_BOOL CXFA_FFPushButton::LoadWidget() {
+ FXSYS_assert(m_pNormalWidget == NULL);
+ CFWL_PushButton* pPushButton = CFWL_PushButton::Create();
+ if (pPushButton) {
+ pPushButton->Initialize();
+ }
+ m_pOldDelegate = pPushButton->SetDelegate(this);
+ m_pNormalWidget = (CFWL_Widget*)pPushButton;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pNormalWidget->LockUpdate();
+ UpdateWidgetProperty();
+ LoadHighlightCaption();
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFPushButton::UpdateWidgetProperty() {
+ FX_DWORD dwStyleEx = 0;
+ switch (m_pDataAcc->GetButtonHighlight()) {
+ case XFA_ATTRIBUTEENUM_Inverted:
+ dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteInverted;
+ break;
+ case XFA_ATTRIBUTEENUM_Outline:
+ dwStyleEx = XFA_FWL_PSBSTYLEEXT_HiliteOutLine;
+ break;
+ case XFA_ATTRIBUTEENUM_Push:
+ dwStyleEx = XFA_FWL_PSBSTYLEEXT_HilitePush;
+ break;
+ default:
+ break;
+ }
+ m_pNormalWidget->ModifyStylesEx(dwStyleEx, 0xFFFFFFFF);
+}
+void CXFA_FFPushButton::UnloadWidget() {
+ if (m_pRolloverTextLayout) {
+ delete m_pRolloverTextLayout;
+ m_pRolloverTextLayout = NULL;
+ }
+ if (m_pDownTextLayout) {
+ delete m_pDownTextLayout;
+ m_pDownTextLayout = NULL;
+ }
+ if (m_pDownProvider) {
+ delete m_pDownProvider;
+ m_pDownProvider = NULL;
+ }
+ if (m_pRollProvider) {
+ delete m_pRollProvider;
+ m_pRollProvider = NULL;
+ }
+ CXFA_FFField::UnloadWidget();
+}
+FX_BOOL CXFA_FFPushButton::PerformLayout() {
+ CXFA_FFWidget::PerformLayout();
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ m_rtUI = rtWidget;
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ XFA_RectWidthoutMargin(rtWidget, mgWidget);
+ }
+ CXFA_Caption caption = m_pDataAcc->GetCaption();
+ m_rtCaption.Set(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height);
+ if (CXFA_Margin mgCap = caption.GetMargin()) {
+ XFA_RectWidthoutMargin(m_rtCaption, mgCap);
+ }
+ LayoutHighlightCaption();
+ SetFWLRect();
+ if (m_pNormalWidget) {
+ m_pNormalWidget->Update();
+ }
+ return TRUE;
+}
+FX_FLOAT CXFA_FFPushButton::GetLineWidth() {
+ CXFA_Border border = m_pDataAcc->GetBorder();
+ if (border.IsExistInXML() &&
+ (border.GetPresence() == XFA_ATTRIBUTEENUM_Visible)) {
+ CXFA_Edge edge = border.GetEdge(0);
+ return edge.GetThickness();
+ }
+ return 0;
+}
+FX_ARGB CXFA_FFPushButton::GetLineColor() {
+ return 0xFF000000;
+}
+FX_ARGB CXFA_FFPushButton::GetFillColor() {
+ return 0xFFFFFFFF;
+}
+void CXFA_FFPushButton::LoadHighlightCaption() {
+ CXFA_Caption caption = m_pDataAcc->GetCaption();
+ if (caption.IsExistInXML() &&
+ caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
+ {
+ CFX_WideString wsRollover;
+ FX_BOOL bRichText;
+ if (m_pDataAcc->GetButtonRollover(wsRollover, bRichText)) {
+ if (m_pRollProvider == NULL) {
+ m_pRollProvider =
+ new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Rollover);
+ }
+ m_pRolloverTextLayout = new CXFA_TextLayout(m_pRollProvider);
+ }
+ CFX_WideString wsDown;
+ if (m_pDataAcc->GetButtonDown(wsDown, bRichText)) {
+ if (m_pDownProvider == NULL) {
+ m_pDownProvider =
+ new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Down);
+ }
+ m_pDownTextLayout = new CXFA_TextLayout(m_pDownProvider);
+ }
+ }
+ }
+}
+void CXFA_FFPushButton::LayoutHighlightCaption() {
+ CFX_SizeF sz;
+ sz.Set(m_rtCaption.width, m_rtCaption.height);
+ LayoutCaption();
+ if (m_pRolloverTextLayout) {
+ m_pRolloverTextLayout->Layout(sz);
+ }
+ if (m_pDownTextLayout) {
+ m_pDownTextLayout->Layout(sz);
+ }
+}
+void CXFA_FFPushButton::RenderHighlightCaption(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix) {
+ CXFA_TextLayout* pCapTextLayout = m_pDataAcc->GetCaptionTextLayout();
+ CXFA_Caption caption = m_pDataAcc->GetCaption();
+ if (caption.IsExistInXML() &&
+ caption.GetPresence() == XFA_ATTRIBUTEENUM_Visible) {
+ CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ CFX_RectF rtClip = m_rtCaption;
+ rtClip.Intersect(rtWidget);
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, m_rtCaption.left, m_rtCaption.top);
+ if (pMatrix) {
+ pMatrix->TransformRect(rtClip);
+ mt.Concat(*pMatrix);
+ }
+ {
+ FX_DWORD dwState = m_pNormalWidget->GetStates();
+ if (m_pDownTextLayout && (dwState & FWL_STATE_PSB_Pressed) &&
+ (dwState & FWL_STATE_PSB_Hovered)) {
+ if (m_pDownTextLayout->DrawString(pRenderDevice, mt, rtClip)) {
+ return;
+ }
+ } else if (m_pRolloverTextLayout && (dwState & FWL_STATE_PSB_Hovered)) {
+ if (m_pRolloverTextLayout->DrawString(pRenderDevice, mt, rtClip)) {
+ return;
+ }
+ }
+ }
+ if (pCapTextLayout) {
+ pCapTextLayout->DrawString(pRenderDevice, mt, rtClip);
+ }
+ }
+}
+int32_t CXFA_FFPushButton::OnProcessMessage(CFWL_Message* pMessage) {
+ return m_pOldDelegate->OnProcessMessage(pMessage);
+}
+FWL_ERR CXFA_FFPushButton::OnProcessEvent(CFWL_Event* pEvent) {
+ m_pOldDelegate->OnProcessEvent(pEvent);
+ return CXFA_FFField::OnProcessEvent(pEvent);
+}
+FWL_ERR CXFA_FFPushButton::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HiliteInverted) {
+ if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
+ (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
+ CFX_RectF rtFill;
+ m_pNormalWidget->GetWidgetRect(rtFill);
+ rtFill.left = rtFill.top = 0;
+ FX_FLOAT fLineWith = GetLineWidth();
+ rtFill.Deflate(fLineWith, fLineWith);
+ CFX_Color cr(FXARGB_MAKE(128, 128, 255, 255));
+ pGraphics->SetFillColor(&cr);
+ CFX_Path path;
+ path.Create();
+ path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height);
+ pGraphics->FillPath(&path, FXFILL_WINDING, (CFX_Matrix*)pMatrix);
+ }
+ } else if (m_pNormalWidget->GetStylesEx() &
+ XFA_FWL_PSBSTYLEEXT_HiliteOutLine) {
+ if ((m_pNormalWidget->GetStates() & FWL_STATE_PSB_Pressed) &&
+ (m_pNormalWidget->GetStates() & FWL_STATE_PSB_Hovered)) {
+ FX_FLOAT fLineWidth = GetLineWidth();
+ CFX_Color cr(FXARGB_MAKE(255, 128, 255, 255));
+ pGraphics->SetStrokeColor(&cr);
+ pGraphics->SetLineWidth(fLineWidth);
+ CFX_Path path;
+ path.Create();
+ CFX_RectF rect;
+ m_pNormalWidget->GetWidgetRect(rect);
+ path.AddRectangle(0, 0, rect.width, rect.height);
+ pGraphics->StrokePath(&path, (CFX_Matrix*)pMatrix);
+ }
+ } else if (m_pNormalWidget->GetStylesEx() & XFA_FWL_PSBSTYLEEXT_HilitePush) {
+ }
+ return FWL_ERR_Succeeded;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffpushbutton.h b/xfa/src/fxfa/src/app/xfa_ffpushbutton.h
index ca9c4327cd..96b71c5327 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpushbutton.h
+++ b/xfa/src/fxfa/src/app/xfa_ffpushbutton.h
@@ -1,43 +1,43 @@
-// 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 _FXFA_FORMFILLER_PUSHBUTTON_IMP_H
-#define _FXFA_FORMFILLER_PUSHBUTTON_IMP_H
-#define XFA_FWL_PSBSTYLEEXT_HiliteNone (0L << 0)
-#define XFA_FWL_PSBSTYLEEXT_HiliteInverted (1L << 0)
-#define XFA_FWL_PSBSTYLEEXT_HilitePush (2L << 0)
-#define XFA_FWL_PSBSTYLEEXT_HiliteOutLine (4L << 0)
-class CXFA_FFPushButton : public CXFA_FFField {
- public:
- CXFA_FFPushButton(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFPushButton();
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual FX_BOOL LoadWidget();
- virtual void UnloadWidget();
- virtual FX_BOOL PerformLayout();
- virtual void UpdateWidgetProperty();
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-
- protected:
- void LoadHighlightCaption();
- void LayoutHighlightCaption();
- void RenderHighlightCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL);
- FX_FLOAT GetLineWidth();
- FX_ARGB GetLineColor();
- FX_ARGB GetFillColor();
- CXFA_TextLayout* m_pRolloverTextLayout;
- CXFA_TextLayout* m_pDownTextLayout;
- CXFA_TextProvider* m_pDownProvider;
- CXFA_TextProvider* m_pRollProvider;
- IFWL_WidgetDelegate* m_pOldDelegate;
-};
-#endif
+// 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 _FXFA_FORMFILLER_PUSHBUTTON_IMP_H
+#define _FXFA_FORMFILLER_PUSHBUTTON_IMP_H
+#define XFA_FWL_PSBSTYLEEXT_HiliteNone (0L << 0)
+#define XFA_FWL_PSBSTYLEEXT_HiliteInverted (1L << 0)
+#define XFA_FWL_PSBSTYLEEXT_HilitePush (2L << 0)
+#define XFA_FWL_PSBSTYLEEXT_HiliteOutLine (4L << 0)
+class CXFA_FFPushButton : public CXFA_FFField {
+ public:
+ CXFA_FFPushButton(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFPushButton();
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual FX_BOOL LoadWidget();
+ virtual void UnloadWidget();
+ virtual FX_BOOL PerformLayout();
+ virtual void UpdateWidgetProperty();
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+
+ protected:
+ void LoadHighlightCaption();
+ void LayoutHighlightCaption();
+ void RenderHighlightCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL);
+ FX_FLOAT GetLineWidth();
+ FX_ARGB GetLineColor();
+ FX_ARGB GetFillColor();
+ CXFA_TextLayout* m_pRolloverTextLayout;
+ CXFA_TextLayout* m_pDownTextLayout;
+ CXFA_TextProvider* m_pDownProvider;
+ CXFA_TextProvider* m_pRollProvider;
+ IFWL_WidgetDelegate* m_pOldDelegate;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffsignature.cpp b/xfa/src/fxfa/src/app/xfa_ffsignature.cpp
index b810292a89..1dc7ed68b5 100644
--- a/xfa/src/fxfa/src/app/xfa_ffsignature.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffsignature.cpp
@@ -1,120 +1,120 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffsignature.h"
-#include "xfa_ffdoc.h"
-CXFA_FFSignature::CXFA_FFSignature(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc) {}
-CXFA_FFSignature::~CXFA_FFSignature() {}
-FX_BOOL CXFA_FFSignature::LoadWidget() {
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFSignature::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
- DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
- RenderCaption(pGS, &mtRotate);
- DrawHighlight(pGS, &mtRotate, dwStatus, FALSE);
- CFX_RectF rtWidget = m_rtUI;
- IXFA_DocProvider* pDocProvider = m_pDataAcc->GetDoc()->GetDocProvider();
- FXSYS_assert(pDocProvider);
- pDocProvider->RenderCustomWidget(this, pGS, &mtRotate, rtWidget);
-}
-FX_BOOL CXFA_FFSignature::OnMouseEnter() {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnMouseExit() {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnLButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnLButtonUp(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnLButtonDblClk(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnMouseMove(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnMouseWheel(FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnRButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnRButtonUp(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnRButtonDblClk(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
- return FALSE;
-}
-FX_BOOL CXFA_FFSignature::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) {
- return FALSE;
-}
-FX_DWORD CXFA_FFSignature::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
- if (m_pNormalWidget) {
- FX_FLOAT ffx = fx, ffy = fy;
- FWLToClient(ffx, ffy);
- FX_DWORD dwWidgetHit = m_pNormalWidget->HitTest(ffx, ffy);
- if (dwWidgetHit != FWL_WGTHITTEST_Unknown) {
- return FWL_WGTHITTEST_Client;
- }
- }
- CFX_RectF rtBox;
- GetRectWithoutRotate(rtBox);
- if (!rtBox.Contains(fx, fy)) {
- return FWL_WGTHITTEST_Unknown;
- }
- if (m_rtCaption.Contains(fx, fy)) {
- return FWL_WGTHITTEST_Titlebar;
- }
- return FWL_WGTHITTEST_Client;
-}
-FX_BOOL CXFA_FFSignature::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) {
- return FALSE;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffsignature.h"
+#include "xfa_ffdoc.h"
+CXFA_FFSignature::CXFA_FFSignature(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc) {}
+CXFA_FFSignature::~CXFA_FFSignature() {}
+FX_BOOL CXFA_FFSignature::LoadWidget() {
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFSignature::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder();
+ DrawBorder(pGS, borderUI, m_rtUI, &mtRotate);
+ RenderCaption(pGS, &mtRotate);
+ DrawHighlight(pGS, &mtRotate, dwStatus, FALSE);
+ CFX_RectF rtWidget = m_rtUI;
+ IXFA_DocProvider* pDocProvider = m_pDataAcc->GetDoc()->GetDocProvider();
+ FXSYS_assert(pDocProvider);
+ pDocProvider->RenderCustomWidget(this, pGS, &mtRotate, rtWidget);
+}
+FX_BOOL CXFA_FFSignature::OnMouseEnter() {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnMouseExit() {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnLButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnLButtonUp(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnLButtonDblClk(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnMouseMove(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnMouseWheel(FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnRButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnRButtonUp(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnRButtonDblClk(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFSignature::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) {
+ return FALSE;
+}
+FX_DWORD CXFA_FFSignature::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
+ if (m_pNormalWidget) {
+ FX_FLOAT ffx = fx, ffy = fy;
+ FWLToClient(ffx, ffy);
+ FX_DWORD dwWidgetHit = m_pNormalWidget->HitTest(ffx, ffy);
+ if (dwWidgetHit != FWL_WGTHITTEST_Unknown) {
+ return FWL_WGTHITTEST_Client;
+ }
+ }
+ CFX_RectF rtBox;
+ GetRectWithoutRotate(rtBox);
+ if (!rtBox.Contains(fx, fy)) {
+ return FWL_WGTHITTEST_Unknown;
+ }
+ if (m_rtCaption.Contains(fx, fy)) {
+ return FWL_WGTHITTEST_Titlebar;
+ }
+ return FWL_WGTHITTEST_Client;
+}
+FX_BOOL CXFA_FFSignature::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) {
+ return FALSE;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffsignature.h b/xfa/src/fxfa/src/app/xfa_ffsignature.h
index c1d15fd2fc..36b1ddca39 100644
--- a/xfa/src/fxfa/src/app/xfa_ffsignature.h
+++ b/xfa/src/fxfa/src/app/xfa_ffsignature.h
@@ -1,41 +1,41 @@
-// 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 _FXFA_FORMFILLER_SIGNATURE_IMP_H
-#define _FXFA_FORMFILLER_SIGNATURE_IMP_H
-class CXFA_FFSignature final : public CXFA_FFField {
- public:
- CXFA_FFSignature(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFSignature();
-
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual FX_BOOL LoadWidget();
- virtual FX_BOOL OnMouseEnter();
- virtual FX_BOOL OnMouseExit();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
-
- virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
- virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
- virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);
- virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);
-
- protected:
-};
-#endif
+// 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 _FXFA_FORMFILLER_SIGNATURE_IMP_H
+#define _FXFA_FORMFILLER_SIGNATURE_IMP_H
+class CXFA_FFSignature final : public CXFA_FFField {
+ public:
+ CXFA_FFSignature(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFSignature();
+
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual FX_BOOL LoadWidget();
+ virtual FX_BOOL OnMouseEnter();
+ virtual FX_BOOL OnMouseExit();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+
+ virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
+ virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
+ virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);
+ virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);
+
+ protected:
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffsubform.cpp b/xfa/src/fxfa/src/app/xfa_ffsubform.cpp
index b4c2e06e1e..c4280b6087 100644
--- a/xfa/src/fxfa/src/app/xfa_ffsubform.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffsubform.cpp
@@ -1,17 +1,17 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffsubform.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-CXFA_FFSubForm::CXFA_FFSubForm(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFWidget(pPageView, pDataAcc) {}
-CXFA_FFSubForm::~CXFA_FFSubForm() {}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffsubform.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+CXFA_FFSubForm::CXFA_FFSubForm(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFWidget(pPageView, pDataAcc) {}
+CXFA_FFSubForm::~CXFA_FFSubForm() {}
diff --git a/xfa/src/fxfa/src/app/xfa_ffsubform.h b/xfa/src/fxfa/src/app/xfa_ffsubform.h
index 396f1f4ccb..8a6f069ca1 100644
--- a/xfa/src/fxfa/src/app/xfa_ffsubform.h
+++ b/xfa/src/fxfa/src/app/xfa_ffsubform.h
@@ -1,16 +1,16 @@
-// 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 _FXFA_FORMFILLER_SUBFORM_IMP_H
-#define _FXFA_FORMFILLER_SUBFORM_IMP_H
-class CXFA_FFSubForm : public CXFA_FFWidget {
- public:
- CXFA_FFSubForm(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFSubForm();
-
- protected:
-};
-#endif
+// 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 _FXFA_FORMFILLER_SUBFORM_IMP_H
+#define _FXFA_FORMFILLER_SUBFORM_IMP_H
+class CXFA_FFSubForm : public CXFA_FFWidget {
+ public:
+ CXFA_FFSubForm(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFSubForm();
+
+ protected:
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_fftext.cpp b/xfa/src/fxfa/src/app/xfa_fftext.cpp
index a4dc78eb00..854c72175a 100644
--- a/xfa/src/fxfa/src/app/xfa_fftext.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fftext.cpp
@@ -1,177 +1,177 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffdraw.h"
-#include "xfa_fftext.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffapp.h"
-CXFA_FFText::CXFA_FFText(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFDraw(pPageView, pDataAcc) {}
-CXFA_FFText::~CXFA_FFText() {}
-void CXFA_FFText::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- {
- CFX_Matrix mtRotate;
- GetRotateMatrix(mtRotate);
- if (pMatrix) {
- mtRotate.Concat(*pMatrix);
- }
- CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
- CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
- if (pTextLayout) {
- CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
- CFX_RectF rtText;
- GetRectWithoutRotate(rtText);
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- CXFA_LayoutItem* pItem = this;
- if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
- XFA_RectWidthoutMargin(rtText, mgWidget);
- } else {
- FX_FLOAT fLeftInset, fRightInset, fTopInset = 0, fBottomInset = 0;
- mgWidget.GetLeftInset(fLeftInset);
- mgWidget.GetRightInset(fRightInset);
- if (pItem->GetPrev() == NULL) {
- mgWidget.GetTopInset(fTopInset);
- } else if (pItem->GetNext() == NULL) {
- mgWidget.GetBottomInset(fBottomInset);
- }
- rtText.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
- }
- }
- CFX_Matrix mt;
- mt.Set(1, 0, 0, 1, rtText.left, rtText.top);
- CFX_RectF rtClip = rtText;
- mtRotate.TransformRect(rtClip);
- mt.Concat(mtRotate);
- pTextLayout->DrawString(pRenderDevice, mt, rtClip, GetIndex());
- }
- }
-}
-FX_BOOL CXFA_FFText::IsLoaded() {
- CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
- return pTextLayout != NULL && !pTextLayout->m_bHasBlock;
-}
-FX_BOOL CXFA_FFText::PerformLayout() {
- CXFA_FFDraw::PerformLayout();
- CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
- if (!pTextLayout) {
- return FALSE;
- }
- if (!pTextLayout->m_bHasBlock) {
- return TRUE;
- }
- pTextLayout->m_Blocks.RemoveAll();
- CXFA_LayoutItem* pItem = this;
- if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
- return TRUE;
- }
- pItem = pItem->GetFirst();
- while (pItem) {
- CFX_RectF rtText;
- pItem->GetRect(rtText);
- if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
- if (pItem->GetPrev() == NULL) {
- FX_FLOAT fTopInset;
- mgWidget.GetTopInset(fTopInset);
- rtText.height -= fTopInset;
- } else if (pItem->GetNext() == NULL) {
- FX_FLOAT fBottomInset;
- mgWidget.GetBottomInset(fBottomInset);
- rtText.height -= fBottomInset;
- }
- }
- pTextLayout->ItemBlocks(rtText, pItem->GetIndex());
- pItem = pItem->GetNext();
- }
- pTextLayout->m_bHasBlock = FALSE;
- return TRUE;
-}
-FX_BOOL CXFA_FFText::OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- CFX_RectF rtBox;
- GetRectWithoutRotate(rtBox);
- if (!rtBox.Contains(fx, fy)) {
- return FALSE;
- }
- const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy);
- if (NULL == wsURLContent) {
- return FALSE;
- }
- SetButtonDown(TRUE);
- return TRUE;
-}
-FX_BOOL CXFA_FFText::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- CFX_RectF rtBox;
- GetRectWithoutRotate(rtBox);
- if (!rtBox.Contains(fx, fy)) {
- return FALSE;
- }
- const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy);
- if (NULL == wsURLContent) {
- return FALSE;
- }
- return TRUE;
-}
-FX_BOOL CXFA_FFText::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- if (!IsButtonDown()) {
- return FALSE;
- }
- SetButtonDown(FALSE);
- const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy);
- if (NULL == wsURLContent) {
- return FALSE;
- }
- CXFA_FFDoc* pDoc = GetDoc();
- pDoc->GetDocProvider()->GotoURL(pDoc, CFX_WideStringC(wsURLContent), FALSE);
- return TRUE;
-}
-FX_DWORD CXFA_FFText::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
- CFX_RectF rtBox;
- GetRectWithoutRotate(rtBox);
- if (!rtBox.Contains(fx, fy)) {
- return FWL_WGTHITTEST_Unknown;
- }
- if (!GetLinkURLAtPoint(fx, fy)) {
- return FWL_WGTHITTEST_Unknown;
- }
- return FWL_WGTHITTEST_HyperLink;
-}
-const FX_WCHAR* CXFA_FFText::GetLinkURLAtPoint(FX_FLOAT fx, FX_FLOAT fy) {
- CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
- if (NULL == pTextLayout) {
- return NULL;
- }
- FX_FLOAT x(fx), y(fy);
- FWLToClient(x, y);
- const CXFA_PieceLineArray* pPieceLines = pTextLayout->GetPieceLines();
- int32_t iCount = pPieceLines->GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- CXFA_PieceLine* pPieceLine = pPieceLines->GetAt(i);
- int32_t iPieces = pPieceLine->m_textPieces.GetSize();
- for (int32_t j = 0; j < iPieces; j++) {
- XFA_LPTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(j);
- if (pPiece->pLinkData && pPiece->rtPiece.Contains(x, y)) {
- return pPiece->pLinkData->GetLinkURL();
- }
- }
- }
- return NULL;
-}
-void CXFA_FFText::FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy) {
- CFX_RectF rtWidget;
- GetRectWithoutRotate(rtWidget);
- fx -= rtWidget.left;
- fy -= rtWidget.top;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffdraw.h"
+#include "xfa_fftext.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffapp.h"
+CXFA_FFText::CXFA_FFText(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFDraw(pPageView, pDataAcc) {}
+CXFA_FFText::~CXFA_FFText() {}
+void CXFA_FFText::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ {
+ CFX_Matrix mtRotate;
+ GetRotateMatrix(mtRotate);
+ if (pMatrix) {
+ mtRotate.Concat(*pMatrix);
+ }
+ CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);
+ CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
+ if (pTextLayout) {
+ CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
+ CFX_RectF rtText;
+ GetRectWithoutRotate(rtText);
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ CXFA_LayoutItem* pItem = this;
+ if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
+ XFA_RectWidthoutMargin(rtText, mgWidget);
+ } else {
+ FX_FLOAT fLeftInset, fRightInset, fTopInset = 0, fBottomInset = 0;
+ mgWidget.GetLeftInset(fLeftInset);
+ mgWidget.GetRightInset(fRightInset);
+ if (pItem->GetPrev() == NULL) {
+ mgWidget.GetTopInset(fTopInset);
+ } else if (pItem->GetNext() == NULL) {
+ mgWidget.GetBottomInset(fBottomInset);
+ }
+ rtText.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
+ }
+ }
+ CFX_Matrix mt;
+ mt.Set(1, 0, 0, 1, rtText.left, rtText.top);
+ CFX_RectF rtClip = rtText;
+ mtRotate.TransformRect(rtClip);
+ mt.Concat(mtRotate);
+ pTextLayout->DrawString(pRenderDevice, mt, rtClip, GetIndex());
+ }
+ }
+}
+FX_BOOL CXFA_FFText::IsLoaded() {
+ CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
+ return pTextLayout != NULL && !pTextLayout->m_bHasBlock;
+}
+FX_BOOL CXFA_FFText::PerformLayout() {
+ CXFA_FFDraw::PerformLayout();
+ CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
+ if (!pTextLayout) {
+ return FALSE;
+ }
+ if (!pTextLayout->m_bHasBlock) {
+ return TRUE;
+ }
+ pTextLayout->m_Blocks.RemoveAll();
+ CXFA_LayoutItem* pItem = this;
+ if (pItem->GetPrev() == NULL && pItem->GetNext() == NULL) {
+ return TRUE;
+ }
+ pItem = pItem->GetFirst();
+ while (pItem) {
+ CFX_RectF rtText;
+ pItem->GetRect(rtText);
+ if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {
+ if (pItem->GetPrev() == NULL) {
+ FX_FLOAT fTopInset;
+ mgWidget.GetTopInset(fTopInset);
+ rtText.height -= fTopInset;
+ } else if (pItem->GetNext() == NULL) {
+ FX_FLOAT fBottomInset;
+ mgWidget.GetBottomInset(fBottomInset);
+ rtText.height -= fBottomInset;
+ }
+ }
+ pTextLayout->ItemBlocks(rtText, pItem->GetIndex());
+ pItem = pItem->GetNext();
+ }
+ pTextLayout->m_bHasBlock = FALSE;
+ return TRUE;
+}
+FX_BOOL CXFA_FFText::OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ CFX_RectF rtBox;
+ GetRectWithoutRotate(rtBox);
+ if (!rtBox.Contains(fx, fy)) {
+ return FALSE;
+ }
+ const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy);
+ if (NULL == wsURLContent) {
+ return FALSE;
+ }
+ SetButtonDown(TRUE);
+ return TRUE;
+}
+FX_BOOL CXFA_FFText::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ CFX_RectF rtBox;
+ GetRectWithoutRotate(rtBox);
+ if (!rtBox.Contains(fx, fy)) {
+ return FALSE;
+ }
+ const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy);
+ if (NULL == wsURLContent) {
+ return FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CXFA_FFText::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ if (!IsButtonDown()) {
+ return FALSE;
+ }
+ SetButtonDown(FALSE);
+ const FX_WCHAR* wsURLContent = GetLinkURLAtPoint(fx, fy);
+ if (NULL == wsURLContent) {
+ return FALSE;
+ }
+ CXFA_FFDoc* pDoc = GetDoc();
+ pDoc->GetDocProvider()->GotoURL(pDoc, CFX_WideStringC(wsURLContent), FALSE);
+ return TRUE;
+}
+FX_DWORD CXFA_FFText::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
+ CFX_RectF rtBox;
+ GetRectWithoutRotate(rtBox);
+ if (!rtBox.Contains(fx, fy)) {
+ return FWL_WGTHITTEST_Unknown;
+ }
+ if (!GetLinkURLAtPoint(fx, fy)) {
+ return FWL_WGTHITTEST_Unknown;
+ }
+ return FWL_WGTHITTEST_HyperLink;
+}
+const FX_WCHAR* CXFA_FFText::GetLinkURLAtPoint(FX_FLOAT fx, FX_FLOAT fy) {
+ CXFA_TextLayout* pTextLayout = m_pDataAcc->GetTextLayout();
+ if (NULL == pTextLayout) {
+ return NULL;
+ }
+ FX_FLOAT x(fx), y(fy);
+ FWLToClient(x, y);
+ const CXFA_PieceLineArray* pPieceLines = pTextLayout->GetPieceLines();
+ int32_t iCount = pPieceLines->GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ CXFA_PieceLine* pPieceLine = pPieceLines->GetAt(i);
+ int32_t iPieces = pPieceLine->m_textPieces.GetSize();
+ for (int32_t j = 0; j < iPieces; j++) {
+ XFA_LPTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(j);
+ if (pPiece->pLinkData && pPiece->rtPiece.Contains(x, y)) {
+ return pPiece->pLinkData->GetLinkURL();
+ }
+ }
+ }
+ return NULL;
+}
+void CXFA_FFText::FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy) {
+ CFX_RectF rtWidget;
+ GetRectWithoutRotate(rtWidget);
+ fx -= rtWidget.left;
+ fy -= rtWidget.top;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_fftext.h b/xfa/src/fxfa/src/app/xfa_fftext.h
index 1fe4a6e3e7..5d8a4701a6 100644
--- a/xfa/src/fxfa/src/app/xfa_fftext.h
+++ b/xfa/src/fxfa/src/app/xfa_fftext.h
@@ -1,29 +1,29 @@
-// 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 _FXFA_FORMFILLER_DRAWTEXT_IMP_H
-#define _FXFA_FORMFILLER_DRAWTEXT_IMP_H
-class CXFA_TextLayout;
-class CXFA_FFText : public CXFA_FFDraw {
- public:
- CXFA_FFText(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFText();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
- virtual FX_BOOL IsLoaded();
- virtual FX_BOOL PerformLayout();
-
- private:
- virtual const FX_WCHAR* GetLinkURLAtPoint(FX_FLOAT fx, FX_FLOAT fy);
- void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy);
-};
-#endif
+// 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 _FXFA_FORMFILLER_DRAWTEXT_IMP_H
+#define _FXFA_FORMFILLER_DRAWTEXT_IMP_H
+class CXFA_TextLayout;
+class CXFA_FFText : public CXFA_FFDraw {
+ public:
+ CXFA_FFText(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFText();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+ virtual FX_BOOL IsLoaded();
+ virtual FX_BOOL PerformLayout();
+
+ private:
+ virtual const FX_WCHAR* GetLinkURLAtPoint(FX_FLOAT fx, FX_FLOAT fy);
+ void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_fftextedit.cpp b/xfa/src/fxfa/src/app/xfa_fftextedit.cpp
index f90a2ccaba..95adb64846 100644
--- a/xfa/src/fxfa/src/app/xfa_fftextedit.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fftextedit.cpp
@@ -1,805 +1,805 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffpageview.h"
-#include "xfa_fftextedit.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffdoc.h"
-CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
-CXFA_FFTextEdit::~CXFA_FFTextEdit() {
- if (m_pNormalWidget) {
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->UnregisterEventTarget(pWidget);
- }
-}
-FX_BOOL CXFA_FFTextEdit::LoadWidget() {
- CFWL_Edit* pFWLEdit = CFWL_Edit::Create();
- pFWLEdit->Initialize();
- m_pNormalWidget = pFWLEdit;
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pWidget, pWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- UpdateWidgetProperty();
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
- pFWLEdit->SetText(wsText);
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFTextEdit::UpdateWidgetProperty() {
- CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget;
- if (!pWidget) {
- return;
- }
- FX_DWORD dwStyle = 0;
- FX_DWORD dwExtendedStyle = FWL_STYLEEXT_EDT_ShowScrollbarFocus |
- FWL_STYLEEXT_EDT_OuterScrollbar |
- FWL_STYLEEXT_EDT_LastLineHeight;
- dwExtendedStyle |= UpdateUIProperty();
- if (m_pDataAcc->IsMultiLine()) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_MultiLine | FWL_STYLEEXT_EDT_WantReturn;
- if (m_pDataAcc->GetVerticalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
- dwStyle |= FWL_WGTSTYLE_VScroll;
- dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoVScroll;
- }
- } else if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
- dwExtendedStyle |= FWL_STYLEEXT_EDT_MultiLine;
- }
- XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN;
- int32_t iMaxChars = m_pDataAcc->GetMaxChars(eType);
- if (eType == XFA_ELEMENT_ExData) {
- iMaxChars = 0;
- }
- int32_t iNumCells = m_pDataAcc->GetNumberOfCells();
- if (iNumCells == 0) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText;
- pWidget->SetLimit(iMaxChars > 0 ? iMaxChars : 1);
- } else if (iNumCells > 0) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText;
- pWidget->SetLimit(iNumCells);
- } else {
- pWidget->SetLimit(iMaxChars);
- }
- dwExtendedStyle |= GetAlignment();
- m_pNormalWidget->ModifyStyles(dwStyle, 0xFFFFFFFF);
- m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
-}
-FX_BOOL CXFA_FFTextEdit::OnLButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!PtInActiveRect(fx, fy)) {
- return FALSE;
- }
- if (!IsFocused()) {
- m_dwStatus |= XFA_WIDGETSTATUS_Focused;
- UpdateFWLData();
- AddInvalidateRect();
- }
- SetButtonDown(TRUE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- FWLToClient(ms.m_fx, ms.m_fy);
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFTextEdit::OnRButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- if (!PtInActiveRect(fx, fy)) {
- return FALSE;
- }
- if (!IsFocused()) {
- m_dwStatus |= XFA_WIDGETSTATUS_Focused;
- UpdateFWLData();
- AddInvalidateRect();
- }
- SetButtonDown(TRUE);
- CFWL_MsgMouse ms;
- ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDown;
- ms.m_dwFlags = dwFlags;
- ms.m_fx = fx;
- ms.m_fy = fy;
- FWLToClient(ms.m_fx, ms.m_fy);
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFTextEdit::OnRButtonUp(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) {
- return FALSE;
- }
- CFX_PointF pt;
- pt.Set(fx, fy);
- GetDoc()->GetDocProvider()->PopupMenu(this, pt, NULL);
- return TRUE;
-}
-FX_BOOL CXFA_FFTextEdit::OnSetFocus(CXFA_FFWidget* pOldWidget) {
- m_dwStatus &= ~XFA_WIDGETSTATUS_TextEditValueChanged;
- if (!IsFocused()) {
- m_dwStatus |= XFA_WIDGETSTATUS_Focused;
- UpdateFWLData();
- AddInvalidateRect();
- }
- CXFA_FFWidget::OnSetFocus(pOldWidget);
- CFWL_MsgSetFocus ms;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- return TRUE;
-}
-FX_BOOL CXFA_FFTextEdit::OnKillFocus(CXFA_FFWidget* pNewWidget) {
- CFWL_MsgKillFocus ms;
- ms.m_pDstTarget = m_pNormalWidget->m_pIface;
- ms.m_pSrcTarget = NULL;
- TranslateFWLMessage(&ms);
- m_dwStatus &= ~XFA_WIDGETSTATUS_Focused;
- SetEditScrollOffset();
- ProcessCommittedData();
- UpdateFWLData();
- AddInvalidateRect();
- CXFA_FFWidget::OnKillFocus(pNewWidget);
- m_dwStatus &= ~XFA_WIDGETSTATUS_TextEditValueChanged;
- return TRUE;
-}
-FX_BOOL CXFA_FFTextEdit::CommitData() {
- CFX_WideString wsText;
- ((CFWL_Edit*)m_pNormalWidget)->GetText(wsText);
- if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) {
- m_pDataAcc->UpdateUIDisplay(this);
- return TRUE;
- }
- ValidateNumberField(wsText);
- return FALSE;
-}
-void CXFA_FFTextEdit::ValidateNumberField(const CFX_WideString& wsText) {
- CXFA_WidgetAcc* pAcc = this->GetDataAcc();
- if (pAcc && pAcc->GetUIType() == XFA_ELEMENT_NumericEdit) {
- IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider();
- if (pAppProvider) {
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
- CFX_WideString wsMessage;
- CFX_WideString wsError;
- pAppProvider->LoadString(XFA_IDS_ValidateNumberError, wsError);
- CFX_WideString wsSomField;
- pAcc->GetNode()->GetSOMExpression(wsSomField);
- wsMessage.Format(wsError, (const FX_WCHAR*)wsText,
- (const FX_WCHAR*)wsSomField);
- pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Error, XFA_MB_OK);
- }
- }
-}
-FX_BOOL CXFA_FFTextEdit::IsDataChanged() {
- return (m_dwStatus & XFA_WIDGETSTATUS_TextEditValueChanged) != 0;
-}
-FX_DWORD CXFA_FFTextEdit::GetAlignment() {
- FX_DWORD dwExtendedStyle = 0;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- int32_t iHorz = para.GetHorizontalAlign();
- switch (iHorz) {
- case XFA_ATTRIBUTEENUM_Center:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_HCenter;
- break;
- case XFA_ATTRIBUTEENUM_Justify:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_Justified;
- break;
- case XFA_ATTRIBUTEENUM_JustifyAll:
- break;
- case XFA_ATTRIBUTEENUM_Radix:
- break;
- case XFA_ATTRIBUTEENUM_Right:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_HFar;
- break;
- default:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_HNear;
- break;
- }
- int32_t iVert = para.GetVerticalAlign();
- switch (iVert) {
- case XFA_ATTRIBUTEENUM_Middle:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_VCenter;
- break;
- case XFA_ATTRIBUTEENUM_Bottom:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_VFar;
- break;
- default:
- dwExtendedStyle |= FWL_STYLEEXT_EDT_VNear;
- break;
- }
- }
- return dwExtendedStyle;
-}
-FX_BOOL CXFA_FFTextEdit::UpdateFWLData() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display;
- if (IsFocused()) {
- eType = XFA_VALUEPICTURE_Edit;
- }
- FX_BOOL bUpdate = FALSE;
- if (m_pDataAcc->GetUIType() == XFA_ELEMENT_TextEdit &&
- m_pDataAcc->GetNumberOfCells() < 0) {
- XFA_ELEMENT elementType = XFA_ELEMENT_UNKNOWN;
- int32_t iMaxChars = m_pDataAcc->GetMaxChars(elementType);
- if (elementType == XFA_ELEMENT_ExData) {
- iMaxChars = eType == XFA_VALUEPICTURE_Edit ? iMaxChars : 0;
- }
- if (((CFWL_Edit*)m_pNormalWidget)->GetLimit() != iMaxChars) {
- ((CFWL_Edit*)m_pNormalWidget)->SetLimit(iMaxChars);
- bUpdate = TRUE;
- }
- }
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, eType);
- CFX_WideString wsOldText;
- ((CFWL_Edit*)m_pNormalWidget)->GetText(wsOldText);
- if (wsText != wsOldText || (eType == XFA_VALUEPICTURE_Edit && bUpdate)) {
- ((CFWL_Edit*)m_pNormalWidget)->SetText(wsText);
- bUpdate = TRUE;
- }
- if (bUpdate) {
- m_pNormalWidget->Update();
- }
- return TRUE;
-}
-FX_BOOL CXFA_FFTextEdit::CanUndo() {
- return ((CFWL_Edit*)m_pNormalWidget)->CanUndo();
-}
-FX_BOOL CXFA_FFTextEdit::CanRedo() {
- return ((CFWL_Edit*)m_pNormalWidget)->CanRedo();
-}
-FX_BOOL CXFA_FFTextEdit::Undo() {
- return ((CFWL_Edit*)m_pNormalWidget)->Undo();
-}
-FX_BOOL CXFA_FFTextEdit::Redo() {
- return ((CFWL_Edit*)m_pNormalWidget)->Redo();
-}
-FX_BOOL CXFA_FFTextEdit::CanCopy() {
- int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges();
- return nCount > 0;
-}
-FX_BOOL CXFA_FFTextEdit::CanCut() {
- if (m_pNormalWidget->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) {
- return FALSE;
- }
- int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges();
- return nCount > 0;
-}
-FX_BOOL CXFA_FFTextEdit::CanPaste() {
- return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open;
-}
-FX_BOOL CXFA_FFTextEdit::CanSelectAll() {
- return ((CFWL_Edit*)m_pNormalWidget)->GetTextLength() > 0;
-}
-FX_BOOL CXFA_FFTextEdit::Copy(CFX_WideString& wsCopy) {
- return ((CFWL_Edit*)m_pNormalWidget)->Copy(wsCopy);
-}
-FX_BOOL CXFA_FFTextEdit::Cut(CFX_WideString& wsCut) {
- return ((CFWL_Edit*)m_pNormalWidget)->Cut(wsCut);
-}
-FX_BOOL CXFA_FFTextEdit::Paste(const CFX_WideString& wsPaste) {
- return ((CFWL_Edit*)m_pNormalWidget)->Paste(wsPaste);
-}
-FX_BOOL CXFA_FFTextEdit::SelectAll() {
- int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->GetTextLength();
- return ((CFWL_Edit*)m_pNormalWidget)->AddSelRange(0, nCount);
-}
-FX_BOOL CXFA_FFTextEdit::Delete() {
- return ((CFWL_Edit*)m_pNormalWidget)->Delete();
-}
-FX_BOOL CXFA_FFTextEdit::DeSelect() {
- return ((CFWL_Edit*)m_pNormalWidget)->ClearSelections();
-}
-FX_BOOL CXFA_FFTextEdit::GetSuggestWords(CFX_PointF pointf,
- CFX_ByteStringArray& sSuggest) {
- if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
- return FALSE;
- }
- FWLToClient(pointf.x, pointf.y);
- return ((CFWL_Edit*)m_pNormalWidget)->GetSuggestWords(pointf, sSuggest);
-}
-FX_BOOL CXFA_FFTextEdit::ReplaceSpellCheckWord(
- CFX_PointF pointf,
- const CFX_ByteStringC& bsReplace) {
- if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
- return FALSE;
- }
- FWLToClient(pointf.x, pointf.y);
- return ((CFWL_Edit*)m_pNormalWidget)
- ->ReplaceSpellCheckWord(pointf, bsReplace);
-}
-void CXFA_FFTextEdit::OnTextChanged(IFWL_Widget* pWidget,
- const CFX_WideString& wsChanged,
- const CFX_WideString& wsPrevText) {
- m_dwStatus |= XFA_WIDGETSTATUS_TextEditValueChanged;
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Change;
- eParam.m_wsChange = wsChanged;
- eParam.m_pTarget = m_pDataAcc;
- eParam.m_wsPrevText = wsPrevText;
- CFWL_Edit* pEdit = ((CFWL_Edit*)m_pNormalWidget);
- if (m_pDataAcc->GetUIType() == XFA_ELEMENT_DateTimeEdit) {
- CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)pEdit;
- pDateTime->GetEditText(eParam.m_wsNewText);
- int32_t iSels = pDateTime->CountSelRanges();
- if (iSels) {
- eParam.m_iSelEnd = pDateTime->GetSelRange(0, eParam.m_iSelStart);
- }
- } else {
- pEdit->GetText(eParam.m_wsNewText);
- int32_t iSels = pEdit->CountSelRanges();
- if (iSels) {
- eParam.m_iSelEnd = pEdit->GetSelRange(0, eParam.m_iSelStart);
- }
- }
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
-}
-void CXFA_FFTextEdit::OnTextFull(IFWL_Widget* pWidget) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Full;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Full, &eParam);
-}
-void CXFA_FFTextEdit::OnAddDoRecord(IFWL_Widget* pWidget) {
- GetDoc()->GetDocProvider()->AddDoRecord(this);
-}
-FX_BOOL CXFA_FFTextEdit::CheckWord(const CFX_ByteStringC& sWord) {
- if (sWord.IsEmpty() || m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
- return TRUE;
- }
- return GetDoc()->GetDocProvider()->CheckWord(GetDoc(), sWord);
-}
-FX_BOOL CXFA_FFTextEdit::GetSuggestWords(const CFX_ByteStringC& sWord,
- CFX_ByteStringArray& sSuggest) {
- if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
- return FALSE;
- }
- return GetDoc()->GetDocProvider()->GetSuggestWords(GetDoc(), sWord, sSuggest);
-}
-int32_t CXFA_FFTextEdit::OnProcessMessage(CFWL_Message* pMessage) {
- return m_pOldDelegate->OnProcessMessage(pMessage);
-}
-FWL_ERR CXFA_FFTextEdit::OnProcessEvent(CFWL_Event* pEvent) {
- CXFA_FFField::OnProcessEvent(pEvent);
- FX_DWORD dwEventID = pEvent->GetClassID();
- switch (dwEventID) {
- case FWL_EVTHASH_EDT_TextChanged: {
- CFWL_EvtEdtTextChanged* event = (CFWL_EvtEdtTextChanged*)pEvent;
- CFX_WideString wsChange;
- OnTextChanged(m_pNormalWidget->GetWidget(), wsChange, event->wsPrevText);
- break;
- }
- case FWL_EVTHASH_EDT_AddDoRecord: {
- OnAddDoRecord(m_pNormalWidget->GetWidget());
- break;
- }
- case FWL_EVTHASH_EDT_TextFull: {
- OnTextFull(m_pNormalWidget->GetWidget());
- break;
- }
- case FWL_EVTHASH_EDT_CheckWord: {
- CFX_WideString wstr(L"FWL_EVENT_DTP_SelectChanged");
- CFWL_EvtEdtCheckWord* event = (CFWL_EvtEdtCheckWord*)pEvent;
- event->bCheckWord = CheckWord(event->bsWord);
- break;
- }
- case FWL_EVTHASH_EDT_GetSuggestWords: {
- CFWL_EvtEdtGetSuggestWords* event = (CFWL_EvtEdtGetSuggestWords*)pEvent;
- event->bSuggestWords =
- GetSuggestWords(event->bsWord, event->bsArraySuggestWords);
- break;
- }
- default: {}
- }
- return m_pOldDelegate->OnProcessEvent(pEvent);
-}
-FWL_ERR CXFA_FFTextEdit::OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix) {
- return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
-}
-CXFA_FFNumericEdit::CXFA_FFNumericEdit(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFTextEdit(pPageView, pDataAcc) {}
-CXFA_FFNumericEdit::~CXFA_FFNumericEdit() {}
-FX_BOOL CXFA_FFNumericEdit::LoadWidget() {
- CFWL_Edit* pWidget = CFWL_Edit::Create();
- pWidget->Initialize();
- m_pNormalWidget = (CFWL_Widget*)pWidget;
- IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pIWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
- pWidget->SetText(wsText);
- UpdateWidgetProperty();
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFNumericEdit::UpdateWidgetProperty() {
- CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget;
- if (!pWidget) {
- return;
- }
- FX_DWORD dwExtendedStyle =
- FWL_STYLEEXT_EDT_ShowScrollbarFocus | FWL_STYLEEXT_EDT_OuterScrollbar |
- FWL_STYLEEXT_EDT_Validate | FWL_STYLEEXT_EDT_Number |
- FWL_STYLEEXT_EDT_LastLineHeight;
- dwExtendedStyle |= UpdateUIProperty();
- if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll;
- }
- int32_t iNumCells = m_pDataAcc->GetNumberOfCells();
- if (iNumCells > 0) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText;
- pWidget->SetLimit(iNumCells);
- }
- dwExtendedStyle |= GetAlignment();
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
- }
- m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
-}
-FWL_ERR CXFA_FFNumericEdit::OnProcessEvent(CFWL_Event* pEvent) {
- FX_DWORD dwEventID = pEvent->GetClassID();
- if (dwEventID == FWL_EVTHASH_EDT_Validate) {
- CFWL_EvtEdtValidate* event = (CFWL_EvtEdtValidate*)pEvent;
- CFX_WideString wsChange = event->wsInsert;
- event->bValidate = OnValidate(m_pNormalWidget->GetWidget(), wsChange);
- return event->bValidate;
- } else {
- return CXFA_FFTextEdit::OnProcessEvent(pEvent);
- }
-}
-FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget,
- CFX_WideString& wsText) {
- CFX_WideString wsPattern;
- m_pDataAcc->GetPictureContent(wsPattern, XFA_VALUEPICTURE_Edit);
- if (!wsPattern.IsEmpty()) {
- return TRUE;
- }
- int32_t iLeads = 0;
- m_pDataAcc->GetLeadDigits(iLeads);
- int32_t iFracs = 0;
- m_pDataAcc->GetFracDigits(iFracs);
- CFX_WideString wsFormat;
- CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(m_pDataAcc);
- widgetValue.GetNumbericFormat(wsFormat, iLeads, iFracs);
- return widgetValue.ValidateNumericTemp(wsText, wsFormat,
- m_pDataAcc->GetLocal());
-}
-CXFA_FFPasswordEdit::CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFTextEdit(pPageView, pDataAcc) {}
-CXFA_FFPasswordEdit::~CXFA_FFPasswordEdit() {}
-FX_BOOL CXFA_FFPasswordEdit::LoadWidget() {
- CFWL_Edit* pWidget = CFWL_Edit::Create();
- pWidget->Initialize();
- m_pNormalWidget = (CFWL_Widget*)pWidget;
- IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pIWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
- pWidget->SetText(wsText);
- UpdateWidgetProperty();
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFPasswordEdit::UpdateWidgetProperty() {
- CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget;
- if (!pWidget) {
- return;
- }
- FX_DWORD dwExtendedStyle =
- FWL_STYLEEXT_EDT_ShowScrollbarFocus | FWL_STYLEEXT_EDT_OuterScrollbar |
- FWL_STYLEEXT_EDT_Password | FWL_STYLEEXT_EDT_LastLineHeight;
- dwExtendedStyle |= UpdateUIProperty();
- CFX_WideString wsPassWord;
- m_pDataAcc->GetPasswordChar(wsPassWord);
- if (!wsPassWord.IsEmpty()) {
- pWidget->SetAliasChar(wsPassWord.GetAt(0));
- }
- if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll;
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
- }
- dwExtendedStyle |= GetAlignment();
- m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
-}
-CXFA_FFDateTimeEdit::CXFA_FFDateTimeEdit(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_FFTextEdit(pPageView, pDataAcc) {}
-CXFA_FFDateTimeEdit::~CXFA_FFDateTimeEdit() {}
-FX_BOOL CXFA_FFDateTimeEdit::GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus) {
- if (bDrawFocus) {
- return FALSE;
- }
-#ifndef _XFA_EMB
- return CXFA_FFWidget::GetBBox(rtBox, dwStatus);
-#endif
- GetRectWithoutRotate(rtBox);
- if (m_pNormalWidget) {
- CFX_RectF rtWidget;
- ((CFWL_DateTimePicker*)m_pNormalWidget)->GetBBox(rtWidget);
- rtBox.Union(rtWidget);
- }
- CFX_Matrix mt;
- GetRotateMatrix(mt);
- mt.TransformRect(rtBox);
- return TRUE;
-}
-FX_BOOL CXFA_FFDateTimeEdit::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- CFX_RectF rtWidget;
- ((CFWL_DateTimePicker*)m_pNormalWidget)->GetBBox(rtWidget);
- if (rtWidget.Contains(fx, fy)) {
- return TRUE;
- }
- return FALSE;
-}
-FX_BOOL CXFA_FFDateTimeEdit::LoadWidget() {
- CFWL_DateTimePicker* pWidget = CFWL_DateTimePicker::Create();
- pWidget->Initialize();
- m_pNormalWidget = (CFWL_Widget*)pWidget;
- IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
- m_pNormalWidget->SetPrivateData(pIWidget, this, NULL);
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
- pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
- m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
- m_pNormalWidget->LockUpdate();
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
- pWidget->SetEditText(wsText);
- XFA_DATETIMETYPE eType = XFA_DATETIMETYPE_DateAndTime;
- if (CXFA_Value value = m_pDataAcc->GetFormValue()) {
- switch (value.GetChildValueClassID()) {
- case XFA_ELEMENT_Date: {
- eType = XFA_DATETIMETYPE_Date;
- if (!wsText.IsEmpty()) {
- CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc);
- CFX_Unitime date = lcValue.GetDate();
- if ((FX_UNITIME)date != 0) {
- pWidget->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay());
- }
- }
- } break;
- case XFA_ELEMENT_Time:
- eType = XFA_DATETIMETYPE_Time;
- break;
- default:
- eType = XFA_DATETIMETYPE_DateAndTime;
- break;
- }
- }
- UpdateWidgetProperty();
- m_pNormalWidget->UnlockUpdate();
- return CXFA_FFField::LoadWidget();
-}
-void CXFA_FFDateTimeEdit::UpdateWidgetProperty() {
- CFWL_DateTimePicker* pWidget = (CFWL_DateTimePicker*)m_pNormalWidget;
- if (!pWidget) {
- return;
- }
- FX_DWORD dwExtendedStyle = FWL_STYLEEXT_DTP_ShortDateFormat;
- dwExtendedStyle |= UpdateUIProperty();
- dwExtendedStyle |= GetAlignment();
- m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
- FX_DWORD dwEditStyles = FWL_STYLEEXT_EDT_LastLineHeight;
- int32_t iNumCells = m_pDataAcc->GetNumberOfCells();
- if (iNumCells > 0) {
- dwEditStyles |= FWL_STYLEEXT_EDT_CombText;
- pWidget->SetEditLimit(iNumCells);
- }
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
- !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
- dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly;
- }
- if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
- dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll;
- }
- pWidget->ModifyEditStylesEx(dwEditStyles, 0xFFFFFFFF);
-}
-FX_DWORD CXFA_FFDateTimeEdit::GetAlignment() {
- FX_DWORD dwExtendedStyle = 0;
- if (CXFA_Para para = m_pDataAcc->GetPara()) {
- int32_t iHorz = para.GetHorizontalAlign();
- switch (iHorz) {
- case XFA_ATTRIBUTEENUM_Center:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHCenter;
- break;
- case XFA_ATTRIBUTEENUM_Justify:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditJustified;
- break;
- case XFA_ATTRIBUTEENUM_JustifyAll:
- break;
- case XFA_ATTRIBUTEENUM_Radix:
- break;
- case XFA_ATTRIBUTEENUM_Right:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHFar;
- break;
- default:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHNear;
- break;
- }
- int32_t iVert = para.GetVerticalAlign();
- switch (iVert) {
- case XFA_ATTRIBUTEENUM_Middle:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVCenter;
- break;
- case XFA_ATTRIBUTEENUM_Bottom:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVFar;
- break;
- default:
- dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVNear;
- break;
- }
- }
- return dwExtendedStyle;
-}
-FX_BOOL CXFA_FFDateTimeEdit::CommitData() {
- CFX_WideString wsText;
- ((CFWL_DateTimePicker*)m_pNormalWidget)->GetEditText(wsText);
- if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) {
- m_pDataAcc->UpdateUIDisplay(this);
- return TRUE;
- }
- return FALSE;
-}
-FX_BOOL CXFA_FFDateTimeEdit::UpdateFWLData() {
- if (!m_pNormalWidget) {
- return FALSE;
- }
- XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display;
- if (IsFocused()) {
- eType = XFA_VALUEPICTURE_Edit;
- }
- CFX_WideString wsText;
- m_pDataAcc->GetValue(wsText, eType);
- ((CFWL_DateTimePicker*)m_pNormalWidget)->SetEditText(wsText);
- if (IsFocused() && !wsText.IsEmpty()) {
- CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc);
- CFX_Unitime date = lcValue.GetDate();
- if (lcValue.IsValid()) {
- if ((FX_UNITIME)date != 0) {
- ((CFWL_DateTimePicker*)m_pNormalWidget)
- ->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay());
- }
- }
- }
- m_pNormalWidget->Update();
- return TRUE;
-}
-FX_BOOL CXFA_FFDateTimeEdit::IsDataChanged() {
- if (m_dwStatus & XFA_WIDGETSTATUS_TextEditValueChanged) {
- return TRUE;
- }
- CFX_WideString wsText;
- ((CFWL_DateTimePicker*)m_pNormalWidget)->GetEditText(wsText);
- CFX_WideString wsOldValue;
- m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Edit);
- return wsOldValue != wsText;
-}
-FX_BOOL CXFA_FFDateTimeEdit::CanUndo() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanUndo();
-}
-FX_BOOL CXFA_FFDateTimeEdit::CanRedo() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanRedo();
-}
-FX_BOOL CXFA_FFDateTimeEdit::Undo() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->Undo();
-}
-FX_BOOL CXFA_FFDateTimeEdit::Redo() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->Redo();
-}
-FX_BOOL CXFA_FFDateTimeEdit::CanCopy() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCopy();
-}
-FX_BOOL CXFA_FFDateTimeEdit::CanCut() {
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
- return FALSE;
- }
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCut();
-}
-FX_BOOL CXFA_FFDateTimeEdit::CanPaste() {
- return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open;
-}
-FX_BOOL CXFA_FFDateTimeEdit::CanSelectAll() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanSelectAll();
-}
-FX_BOOL CXFA_FFDateTimeEdit::Copy(CFX_WideString& wsCopy) {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->Copy(wsCopy);
-}
-FX_BOOL CXFA_FFDateTimeEdit::Cut(CFX_WideString& wsCut) {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->Cut(wsCut);
-}
-FX_BOOL CXFA_FFDateTimeEdit::Paste(const CFX_WideString& wsPaste) {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->Paste(wsPaste);
-}
-FX_BOOL CXFA_FFDateTimeEdit::SelectAll() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->SelectAll();
-}
-FX_BOOL CXFA_FFDateTimeEdit::Delete() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->Delete();
-}
-FX_BOOL CXFA_FFDateTimeEdit::DeSelect() {
- return ((CFWL_DateTimePicker*)m_pNormalWidget)->DeSelect();
-}
-void CXFA_FFDateTimeEdit::OnSelectChanged(IFWL_Widget* pWidget,
- int32_t iYear,
- int32_t iMonth,
- int32_t iDay) {
- CFX_WideString wsPicture;
- m_pDataAcc->GetPictureContent(wsPicture, XFA_VALUEPICTURE_Edit);
- CXFA_LocaleValue date(XFA_VT_DATE,
- this->GetDoc()->GetXFADoc()->GetLocalMgr());
- CFX_Unitime dt;
- dt.Set(iYear, iMonth, iDay);
- date.SetDate(dt);
- CFX_WideString wsDate;
- date.FormatPatterns(wsDate, wsPicture, m_pDataAcc->GetLocal(),
- XFA_VALUEPICTURE_Edit);
- CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)m_pNormalWidget;
- pDateTime->SetEditText(wsDate);
- pDateTime->Update();
- GetDoc()->GetDocProvider()->SetFocusWidget(GetDoc(), NULL);
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Change;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
-}
-FWL_ERR CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) {
- FX_DWORD dwEventID = pEvent->GetClassID();
- if (dwEventID == FWL_EVTHASH_DTP_SelectChanged) {
- CFWL_Event_DtpSelectChanged* event = (CFWL_Event_DtpSelectChanged*)pEvent;
- OnSelectChanged(m_pNormalWidget->GetWidget(), event->iYear, event->iMonth,
- event->iDay);
- return TRUE;
- } else {
- return CXFA_FFTextEdit::OnProcessEvent(pEvent);
- }
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffpageview.h"
+#include "xfa_fftextedit.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffdoc.h"
+CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {}
+CXFA_FFTextEdit::~CXFA_FFTextEdit() {
+ if (m_pNormalWidget) {
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->UnregisterEventTarget(pWidget);
+ }
+}
+FX_BOOL CXFA_FFTextEdit::LoadWidget() {
+ CFWL_Edit* pFWLEdit = CFWL_Edit::Create();
+ pFWLEdit->Initialize();
+ m_pNormalWidget = pFWLEdit;
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ UpdateWidgetProperty();
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ pFWLEdit->SetText(wsText);
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFTextEdit::UpdateWidgetProperty() {
+ CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget;
+ if (!pWidget) {
+ return;
+ }
+ FX_DWORD dwStyle = 0;
+ FX_DWORD dwExtendedStyle = FWL_STYLEEXT_EDT_ShowScrollbarFocus |
+ FWL_STYLEEXT_EDT_OuterScrollbar |
+ FWL_STYLEEXT_EDT_LastLineHeight;
+ dwExtendedStyle |= UpdateUIProperty();
+ if (m_pDataAcc->IsMultiLine()) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_MultiLine | FWL_STYLEEXT_EDT_WantReturn;
+ if (m_pDataAcc->GetVerticalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
+ dwStyle |= FWL_WGTSTYLE_VScroll;
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoVScroll;
+ }
+ } else if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_MultiLine;
+ }
+ XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN;
+ int32_t iMaxChars = m_pDataAcc->GetMaxChars(eType);
+ if (eType == XFA_ELEMENT_ExData) {
+ iMaxChars = 0;
+ }
+ int32_t iNumCells = m_pDataAcc->GetNumberOfCells();
+ if (iNumCells == 0) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText;
+ pWidget->SetLimit(iMaxChars > 0 ? iMaxChars : 1);
+ } else if (iNumCells > 0) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText;
+ pWidget->SetLimit(iNumCells);
+ } else {
+ pWidget->SetLimit(iMaxChars);
+ }
+ dwExtendedStyle |= GetAlignment();
+ m_pNormalWidget->ModifyStyles(dwStyle, 0xFFFFFFFF);
+ m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
+}
+FX_BOOL CXFA_FFTextEdit::OnLButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!PtInActiveRect(fx, fy)) {
+ return FALSE;
+ }
+ if (!IsFocused()) {
+ m_dwStatus |= XFA_WIDGETSTATUS_Focused;
+ UpdateFWLData();
+ AddInvalidateRect();
+ }
+ SetButtonDown(TRUE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFTextEdit::OnRButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ if (!PtInActiveRect(fx, fy)) {
+ return FALSE;
+ }
+ if (!IsFocused()) {
+ m_dwStatus |= XFA_WIDGETSTATUS_Focused;
+ UpdateFWLData();
+ AddInvalidateRect();
+ }
+ SetButtonDown(TRUE);
+ CFWL_MsgMouse ms;
+ ms.m_dwCmd = FWL_MSGMOUSECMD_RButtonDown;
+ ms.m_dwFlags = dwFlags;
+ ms.m_fx = fx;
+ ms.m_fy = fy;
+ FWLToClient(ms.m_fx, ms.m_fy);
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFTextEdit::OnRButtonUp(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!CXFA_FFField::OnRButtonUp(dwFlags, fx, fy)) {
+ return FALSE;
+ }
+ CFX_PointF pt;
+ pt.Set(fx, fy);
+ GetDoc()->GetDocProvider()->PopupMenu(this, pt, NULL);
+ return TRUE;
+}
+FX_BOOL CXFA_FFTextEdit::OnSetFocus(CXFA_FFWidget* pOldWidget) {
+ m_dwStatus &= ~XFA_WIDGETSTATUS_TextEditValueChanged;
+ if (!IsFocused()) {
+ m_dwStatus |= XFA_WIDGETSTATUS_Focused;
+ UpdateFWLData();
+ AddInvalidateRect();
+ }
+ CXFA_FFWidget::OnSetFocus(pOldWidget);
+ CFWL_MsgSetFocus ms;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ return TRUE;
+}
+FX_BOOL CXFA_FFTextEdit::OnKillFocus(CXFA_FFWidget* pNewWidget) {
+ CFWL_MsgKillFocus ms;
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface;
+ ms.m_pSrcTarget = NULL;
+ TranslateFWLMessage(&ms);
+ m_dwStatus &= ~XFA_WIDGETSTATUS_Focused;
+ SetEditScrollOffset();
+ ProcessCommittedData();
+ UpdateFWLData();
+ AddInvalidateRect();
+ CXFA_FFWidget::OnKillFocus(pNewWidget);
+ m_dwStatus &= ~XFA_WIDGETSTATUS_TextEditValueChanged;
+ return TRUE;
+}
+FX_BOOL CXFA_FFTextEdit::CommitData() {
+ CFX_WideString wsText;
+ ((CFWL_Edit*)m_pNormalWidget)->GetText(wsText);
+ if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) {
+ m_pDataAcc->UpdateUIDisplay(this);
+ return TRUE;
+ }
+ ValidateNumberField(wsText);
+ return FALSE;
+}
+void CXFA_FFTextEdit::ValidateNumberField(const CFX_WideString& wsText) {
+ CXFA_WidgetAcc* pAcc = this->GetDataAcc();
+ if (pAcc && pAcc->GetUIType() == XFA_ELEMENT_NumericEdit) {
+ IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider();
+ if (pAppProvider) {
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
+ CFX_WideString wsMessage;
+ CFX_WideString wsError;
+ pAppProvider->LoadString(XFA_IDS_ValidateNumberError, wsError);
+ CFX_WideString wsSomField;
+ pAcc->GetNode()->GetSOMExpression(wsSomField);
+ wsMessage.Format(wsError, (const FX_WCHAR*)wsText,
+ (const FX_WCHAR*)wsSomField);
+ pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Error, XFA_MB_OK);
+ }
+ }
+}
+FX_BOOL CXFA_FFTextEdit::IsDataChanged() {
+ return (m_dwStatus & XFA_WIDGETSTATUS_TextEditValueChanged) != 0;
+}
+FX_DWORD CXFA_FFTextEdit::GetAlignment() {
+ FX_DWORD dwExtendedStyle = 0;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ int32_t iHorz = para.GetHorizontalAlign();
+ switch (iHorz) {
+ case XFA_ATTRIBUTEENUM_Center:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_HCenter;
+ break;
+ case XFA_ATTRIBUTEENUM_Justify:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_Justified;
+ break;
+ case XFA_ATTRIBUTEENUM_JustifyAll:
+ break;
+ case XFA_ATTRIBUTEENUM_Radix:
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_HFar;
+ break;
+ default:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_HNear;
+ break;
+ }
+ int32_t iVert = para.GetVerticalAlign();
+ switch (iVert) {
+ case XFA_ATTRIBUTEENUM_Middle:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_VCenter;
+ break;
+ case XFA_ATTRIBUTEENUM_Bottom:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_VFar;
+ break;
+ default:
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_VNear;
+ break;
+ }
+ }
+ return dwExtendedStyle;
+}
+FX_BOOL CXFA_FFTextEdit::UpdateFWLData() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display;
+ if (IsFocused()) {
+ eType = XFA_VALUEPICTURE_Edit;
+ }
+ FX_BOOL bUpdate = FALSE;
+ if (m_pDataAcc->GetUIType() == XFA_ELEMENT_TextEdit &&
+ m_pDataAcc->GetNumberOfCells() < 0) {
+ XFA_ELEMENT elementType = XFA_ELEMENT_UNKNOWN;
+ int32_t iMaxChars = m_pDataAcc->GetMaxChars(elementType);
+ if (elementType == XFA_ELEMENT_ExData) {
+ iMaxChars = eType == XFA_VALUEPICTURE_Edit ? iMaxChars : 0;
+ }
+ if (((CFWL_Edit*)m_pNormalWidget)->GetLimit() != iMaxChars) {
+ ((CFWL_Edit*)m_pNormalWidget)->SetLimit(iMaxChars);
+ bUpdate = TRUE;
+ }
+ }
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, eType);
+ CFX_WideString wsOldText;
+ ((CFWL_Edit*)m_pNormalWidget)->GetText(wsOldText);
+ if (wsText != wsOldText || (eType == XFA_VALUEPICTURE_Edit && bUpdate)) {
+ ((CFWL_Edit*)m_pNormalWidget)->SetText(wsText);
+ bUpdate = TRUE;
+ }
+ if (bUpdate) {
+ m_pNormalWidget->Update();
+ }
+ return TRUE;
+}
+FX_BOOL CXFA_FFTextEdit::CanUndo() {
+ return ((CFWL_Edit*)m_pNormalWidget)->CanUndo();
+}
+FX_BOOL CXFA_FFTextEdit::CanRedo() {
+ return ((CFWL_Edit*)m_pNormalWidget)->CanRedo();
+}
+FX_BOOL CXFA_FFTextEdit::Undo() {
+ return ((CFWL_Edit*)m_pNormalWidget)->Undo();
+}
+FX_BOOL CXFA_FFTextEdit::Redo() {
+ return ((CFWL_Edit*)m_pNormalWidget)->Redo();
+}
+FX_BOOL CXFA_FFTextEdit::CanCopy() {
+ int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges();
+ return nCount > 0;
+}
+FX_BOOL CXFA_FFTextEdit::CanCut() {
+ if (m_pNormalWidget->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) {
+ return FALSE;
+ }
+ int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges();
+ return nCount > 0;
+}
+FX_BOOL CXFA_FFTextEdit::CanPaste() {
+ return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open;
+}
+FX_BOOL CXFA_FFTextEdit::CanSelectAll() {
+ return ((CFWL_Edit*)m_pNormalWidget)->GetTextLength() > 0;
+}
+FX_BOOL CXFA_FFTextEdit::Copy(CFX_WideString& wsCopy) {
+ return ((CFWL_Edit*)m_pNormalWidget)->Copy(wsCopy);
+}
+FX_BOOL CXFA_FFTextEdit::Cut(CFX_WideString& wsCut) {
+ return ((CFWL_Edit*)m_pNormalWidget)->Cut(wsCut);
+}
+FX_BOOL CXFA_FFTextEdit::Paste(const CFX_WideString& wsPaste) {
+ return ((CFWL_Edit*)m_pNormalWidget)->Paste(wsPaste);
+}
+FX_BOOL CXFA_FFTextEdit::SelectAll() {
+ int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->GetTextLength();
+ return ((CFWL_Edit*)m_pNormalWidget)->AddSelRange(0, nCount);
+}
+FX_BOOL CXFA_FFTextEdit::Delete() {
+ return ((CFWL_Edit*)m_pNormalWidget)->Delete();
+}
+FX_BOOL CXFA_FFTextEdit::DeSelect() {
+ return ((CFWL_Edit*)m_pNormalWidget)->ClearSelections();
+}
+FX_BOOL CXFA_FFTextEdit::GetSuggestWords(CFX_PointF pointf,
+ CFX_ByteStringArray& sSuggest) {
+ if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
+ return FALSE;
+ }
+ FWLToClient(pointf.x, pointf.y);
+ return ((CFWL_Edit*)m_pNormalWidget)->GetSuggestWords(pointf, sSuggest);
+}
+FX_BOOL CXFA_FFTextEdit::ReplaceSpellCheckWord(
+ CFX_PointF pointf,
+ const CFX_ByteStringC& bsReplace) {
+ if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
+ return FALSE;
+ }
+ FWLToClient(pointf.x, pointf.y);
+ return ((CFWL_Edit*)m_pNormalWidget)
+ ->ReplaceSpellCheckWord(pointf, bsReplace);
+}
+void CXFA_FFTextEdit::OnTextChanged(IFWL_Widget* pWidget,
+ const CFX_WideString& wsChanged,
+ const CFX_WideString& wsPrevText) {
+ m_dwStatus |= XFA_WIDGETSTATUS_TextEditValueChanged;
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Change;
+ eParam.m_wsChange = wsChanged;
+ eParam.m_pTarget = m_pDataAcc;
+ eParam.m_wsPrevText = wsPrevText;
+ CFWL_Edit* pEdit = ((CFWL_Edit*)m_pNormalWidget);
+ if (m_pDataAcc->GetUIType() == XFA_ELEMENT_DateTimeEdit) {
+ CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)pEdit;
+ pDateTime->GetEditText(eParam.m_wsNewText);
+ int32_t iSels = pDateTime->CountSelRanges();
+ if (iSels) {
+ eParam.m_iSelEnd = pDateTime->GetSelRange(0, eParam.m_iSelStart);
+ }
+ } else {
+ pEdit->GetText(eParam.m_wsNewText);
+ int32_t iSels = pEdit->CountSelRanges();
+ if (iSels) {
+ eParam.m_iSelEnd = pEdit->GetSelRange(0, eParam.m_iSelStart);
+ }
+ }
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
+}
+void CXFA_FFTextEdit::OnTextFull(IFWL_Widget* pWidget) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Full;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Full, &eParam);
+}
+void CXFA_FFTextEdit::OnAddDoRecord(IFWL_Widget* pWidget) {
+ GetDoc()->GetDocProvider()->AddDoRecord(this);
+}
+FX_BOOL CXFA_FFTextEdit::CheckWord(const CFX_ByteStringC& sWord) {
+ if (sWord.IsEmpty() || m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
+ return TRUE;
+ }
+ return GetDoc()->GetDocProvider()->CheckWord(GetDoc(), sWord);
+}
+FX_BOOL CXFA_FFTextEdit::GetSuggestWords(const CFX_ByteStringC& sWord,
+ CFX_ByteStringArray& sSuggest) {
+ if (m_pDataAcc->GetUIType() != XFA_ELEMENT_TextEdit) {
+ return FALSE;
+ }
+ return GetDoc()->GetDocProvider()->GetSuggestWords(GetDoc(), sWord, sSuggest);
+}
+int32_t CXFA_FFTextEdit::OnProcessMessage(CFWL_Message* pMessage) {
+ return m_pOldDelegate->OnProcessMessage(pMessage);
+}
+FWL_ERR CXFA_FFTextEdit::OnProcessEvent(CFWL_Event* pEvent) {
+ CXFA_FFField::OnProcessEvent(pEvent);
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ switch (dwEventID) {
+ case FWL_EVTHASH_EDT_TextChanged: {
+ CFWL_EvtEdtTextChanged* event = (CFWL_EvtEdtTextChanged*)pEvent;
+ CFX_WideString wsChange;
+ OnTextChanged(m_pNormalWidget->GetWidget(), wsChange, event->wsPrevText);
+ break;
+ }
+ case FWL_EVTHASH_EDT_AddDoRecord: {
+ OnAddDoRecord(m_pNormalWidget->GetWidget());
+ break;
+ }
+ case FWL_EVTHASH_EDT_TextFull: {
+ OnTextFull(m_pNormalWidget->GetWidget());
+ break;
+ }
+ case FWL_EVTHASH_EDT_CheckWord: {
+ CFX_WideString wstr(L"FWL_EVENT_DTP_SelectChanged");
+ CFWL_EvtEdtCheckWord* event = (CFWL_EvtEdtCheckWord*)pEvent;
+ event->bCheckWord = CheckWord(event->bsWord);
+ break;
+ }
+ case FWL_EVTHASH_EDT_GetSuggestWords: {
+ CFWL_EvtEdtGetSuggestWords* event = (CFWL_EvtEdtGetSuggestWords*)pEvent;
+ event->bSuggestWords =
+ GetSuggestWords(event->bsWord, event->bsArraySuggestWords);
+ break;
+ }
+ default: {}
+ }
+ return m_pOldDelegate->OnProcessEvent(pEvent);
+}
+FWL_ERR CXFA_FFTextEdit::OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix) {
+ return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
+}
+CXFA_FFNumericEdit::CXFA_FFNumericEdit(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFTextEdit(pPageView, pDataAcc) {}
+CXFA_FFNumericEdit::~CXFA_FFNumericEdit() {}
+FX_BOOL CXFA_FFNumericEdit::LoadWidget() {
+ CFWL_Edit* pWidget = CFWL_Edit::Create();
+ pWidget->Initialize();
+ m_pNormalWidget = (CFWL_Widget*)pWidget;
+ IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pIWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ pWidget->SetText(wsText);
+ UpdateWidgetProperty();
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFNumericEdit::UpdateWidgetProperty() {
+ CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget;
+ if (!pWidget) {
+ return;
+ }
+ FX_DWORD dwExtendedStyle =
+ FWL_STYLEEXT_EDT_ShowScrollbarFocus | FWL_STYLEEXT_EDT_OuterScrollbar |
+ FWL_STYLEEXT_EDT_Validate | FWL_STYLEEXT_EDT_Number |
+ FWL_STYLEEXT_EDT_LastLineHeight;
+ dwExtendedStyle |= UpdateUIProperty();
+ if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll;
+ }
+ int32_t iNumCells = m_pDataAcc->GetNumberOfCells();
+ if (iNumCells > 0) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_CombText;
+ pWidget->SetLimit(iNumCells);
+ }
+ dwExtendedStyle |= GetAlignment();
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
+ }
+ m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
+}
+FWL_ERR CXFA_FFNumericEdit::OnProcessEvent(CFWL_Event* pEvent) {
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ if (dwEventID == FWL_EVTHASH_EDT_Validate) {
+ CFWL_EvtEdtValidate* event = (CFWL_EvtEdtValidate*)pEvent;
+ CFX_WideString wsChange = event->wsInsert;
+ event->bValidate = OnValidate(m_pNormalWidget->GetWidget(), wsChange);
+ return event->bValidate;
+ } else {
+ return CXFA_FFTextEdit::OnProcessEvent(pEvent);
+ }
+}
+FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget,
+ CFX_WideString& wsText) {
+ CFX_WideString wsPattern;
+ m_pDataAcc->GetPictureContent(wsPattern, XFA_VALUEPICTURE_Edit);
+ if (!wsPattern.IsEmpty()) {
+ return TRUE;
+ }
+ int32_t iLeads = 0;
+ m_pDataAcc->GetLeadDigits(iLeads);
+ int32_t iFracs = 0;
+ m_pDataAcc->GetFracDigits(iFracs);
+ CFX_WideString wsFormat;
+ CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(m_pDataAcc);
+ widgetValue.GetNumbericFormat(wsFormat, iLeads, iFracs);
+ return widgetValue.ValidateNumericTemp(wsText, wsFormat,
+ m_pDataAcc->GetLocal());
+}
+CXFA_FFPasswordEdit::CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFTextEdit(pPageView, pDataAcc) {}
+CXFA_FFPasswordEdit::~CXFA_FFPasswordEdit() {}
+FX_BOOL CXFA_FFPasswordEdit::LoadWidget() {
+ CFWL_Edit* pWidget = CFWL_Edit::Create();
+ pWidget->Initialize();
+ m_pNormalWidget = (CFWL_Widget*)pWidget;
+ IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pIWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ pWidget->SetText(wsText);
+ UpdateWidgetProperty();
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFPasswordEdit::UpdateWidgetProperty() {
+ CFWL_Edit* pWidget = (CFWL_Edit*)m_pNormalWidget;
+ if (!pWidget) {
+ return;
+ }
+ FX_DWORD dwExtendedStyle =
+ FWL_STYLEEXT_EDT_ShowScrollbarFocus | FWL_STYLEEXT_EDT_OuterScrollbar |
+ FWL_STYLEEXT_EDT_Password | FWL_STYLEEXT_EDT_LastLineHeight;
+ dwExtendedStyle |= UpdateUIProperty();
+ CFX_WideString wsPassWord;
+ m_pDataAcc->GetPasswordChar(wsPassWord);
+ if (!wsPassWord.IsEmpty()) {
+ pWidget->SetAliasChar(wsPassWord.GetAt(0));
+ }
+ if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll;
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
+ }
+ dwExtendedStyle |= GetAlignment();
+ m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
+}
+CXFA_FFDateTimeEdit::CXFA_FFDateTimeEdit(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_FFTextEdit(pPageView, pDataAcc) {}
+CXFA_FFDateTimeEdit::~CXFA_FFDateTimeEdit() {}
+FX_BOOL CXFA_FFDateTimeEdit::GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus) {
+ if (bDrawFocus) {
+ return FALSE;
+ }
+#ifndef _XFA_EMB
+ return CXFA_FFWidget::GetBBox(rtBox, dwStatus);
+#endif
+ GetRectWithoutRotate(rtBox);
+ if (m_pNormalWidget) {
+ CFX_RectF rtWidget;
+ ((CFWL_DateTimePicker*)m_pNormalWidget)->GetBBox(rtWidget);
+ rtBox.Union(rtWidget);
+ }
+ CFX_Matrix mt;
+ GetRotateMatrix(mt);
+ mt.TransformRect(rtBox);
+ return TRUE;
+}
+FX_BOOL CXFA_FFDateTimeEdit::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ CFX_RectF rtWidget;
+ ((CFWL_DateTimePicker*)m_pNormalWidget)->GetBBox(rtWidget);
+ if (rtWidget.Contains(fx, fy)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_FFDateTimeEdit::LoadWidget() {
+ CFWL_DateTimePicker* pWidget = CFWL_DateTimePicker::Create();
+ pWidget->Initialize();
+ m_pNormalWidget = (CFWL_Widget*)pWidget;
+ IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
+ m_pNormalWidget->SetPrivateData(pIWidget, this, NULL);
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver();
+ pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
+ m_pOldDelegate = m_pNormalWidget->SetDelegate(this);
+ m_pNormalWidget->LockUpdate();
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ pWidget->SetEditText(wsText);
+ XFA_DATETIMETYPE eType = XFA_DATETIMETYPE_DateAndTime;
+ if (CXFA_Value value = m_pDataAcc->GetFormValue()) {
+ switch (value.GetChildValueClassID()) {
+ case XFA_ELEMENT_Date: {
+ eType = XFA_DATETIMETYPE_Date;
+ if (!wsText.IsEmpty()) {
+ CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc);
+ CFX_Unitime date = lcValue.GetDate();
+ if ((FX_UNITIME)date != 0) {
+ pWidget->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay());
+ }
+ }
+ } break;
+ case XFA_ELEMENT_Time:
+ eType = XFA_DATETIMETYPE_Time;
+ break;
+ default:
+ eType = XFA_DATETIMETYPE_DateAndTime;
+ break;
+ }
+ }
+ UpdateWidgetProperty();
+ m_pNormalWidget->UnlockUpdate();
+ return CXFA_FFField::LoadWidget();
+}
+void CXFA_FFDateTimeEdit::UpdateWidgetProperty() {
+ CFWL_DateTimePicker* pWidget = (CFWL_DateTimePicker*)m_pNormalWidget;
+ if (!pWidget) {
+ return;
+ }
+ FX_DWORD dwExtendedStyle = FWL_STYLEEXT_DTP_ShortDateFormat;
+ dwExtendedStyle |= UpdateUIProperty();
+ dwExtendedStyle |= GetAlignment();
+ m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
+ FX_DWORD dwEditStyles = FWL_STYLEEXT_EDT_LastLineHeight;
+ int32_t iNumCells = m_pDataAcc->GetNumberOfCells();
+ if (iNumCells > 0) {
+ dwEditStyles |= FWL_STYLEEXT_EDT_CombText;
+ pWidget->SetEditLimit(iNumCells);
+ }
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
+ !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
+ dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly;
+ }
+ if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) {
+ dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll;
+ }
+ pWidget->ModifyEditStylesEx(dwEditStyles, 0xFFFFFFFF);
+}
+FX_DWORD CXFA_FFDateTimeEdit::GetAlignment() {
+ FX_DWORD dwExtendedStyle = 0;
+ if (CXFA_Para para = m_pDataAcc->GetPara()) {
+ int32_t iHorz = para.GetHorizontalAlign();
+ switch (iHorz) {
+ case XFA_ATTRIBUTEENUM_Center:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHCenter;
+ break;
+ case XFA_ATTRIBUTEENUM_Justify:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditJustified;
+ break;
+ case XFA_ATTRIBUTEENUM_JustifyAll:
+ break;
+ case XFA_ATTRIBUTEENUM_Radix:
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHFar;
+ break;
+ default:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHNear;
+ break;
+ }
+ int32_t iVert = para.GetVerticalAlign();
+ switch (iVert) {
+ case XFA_ATTRIBUTEENUM_Middle:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVCenter;
+ break;
+ case XFA_ATTRIBUTEENUM_Bottom:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVFar;
+ break;
+ default:
+ dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVNear;
+ break;
+ }
+ }
+ return dwExtendedStyle;
+}
+FX_BOOL CXFA_FFDateTimeEdit::CommitData() {
+ CFX_WideString wsText;
+ ((CFWL_DateTimePicker*)m_pNormalWidget)->GetEditText(wsText);
+ if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) {
+ m_pDataAcc->UpdateUIDisplay(this);
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_FFDateTimeEdit::UpdateFWLData() {
+ if (!m_pNormalWidget) {
+ return FALSE;
+ }
+ XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display;
+ if (IsFocused()) {
+ eType = XFA_VALUEPICTURE_Edit;
+ }
+ CFX_WideString wsText;
+ m_pDataAcc->GetValue(wsText, eType);
+ ((CFWL_DateTimePicker*)m_pNormalWidget)->SetEditText(wsText);
+ if (IsFocused() && !wsText.IsEmpty()) {
+ CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc);
+ CFX_Unitime date = lcValue.GetDate();
+ if (lcValue.IsValid()) {
+ if ((FX_UNITIME)date != 0) {
+ ((CFWL_DateTimePicker*)m_pNormalWidget)
+ ->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay());
+ }
+ }
+ }
+ m_pNormalWidget->Update();
+ return TRUE;
+}
+FX_BOOL CXFA_FFDateTimeEdit::IsDataChanged() {
+ if (m_dwStatus & XFA_WIDGETSTATUS_TextEditValueChanged) {
+ return TRUE;
+ }
+ CFX_WideString wsText;
+ ((CFWL_DateTimePicker*)m_pNormalWidget)->GetEditText(wsText);
+ CFX_WideString wsOldValue;
+ m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Edit);
+ return wsOldValue != wsText;
+}
+FX_BOOL CXFA_FFDateTimeEdit::CanUndo() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanUndo();
+}
+FX_BOOL CXFA_FFDateTimeEdit::CanRedo() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanRedo();
+}
+FX_BOOL CXFA_FFDateTimeEdit::Undo() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->Undo();
+}
+FX_BOOL CXFA_FFDateTimeEdit::Redo() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->Redo();
+}
+FX_BOOL CXFA_FFDateTimeEdit::CanCopy() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCopy();
+}
+FX_BOOL CXFA_FFDateTimeEdit::CanCut() {
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+ return FALSE;
+ }
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCut();
+}
+FX_BOOL CXFA_FFDateTimeEdit::CanPaste() {
+ return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open;
+}
+FX_BOOL CXFA_FFDateTimeEdit::CanSelectAll() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanSelectAll();
+}
+FX_BOOL CXFA_FFDateTimeEdit::Copy(CFX_WideString& wsCopy) {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->Copy(wsCopy);
+}
+FX_BOOL CXFA_FFDateTimeEdit::Cut(CFX_WideString& wsCut) {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->Cut(wsCut);
+}
+FX_BOOL CXFA_FFDateTimeEdit::Paste(const CFX_WideString& wsPaste) {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->Paste(wsPaste);
+}
+FX_BOOL CXFA_FFDateTimeEdit::SelectAll() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->SelectAll();
+}
+FX_BOOL CXFA_FFDateTimeEdit::Delete() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->Delete();
+}
+FX_BOOL CXFA_FFDateTimeEdit::DeSelect() {
+ return ((CFWL_DateTimePicker*)m_pNormalWidget)->DeSelect();
+}
+void CXFA_FFDateTimeEdit::OnSelectChanged(IFWL_Widget* pWidget,
+ int32_t iYear,
+ int32_t iMonth,
+ int32_t iDay) {
+ CFX_WideString wsPicture;
+ m_pDataAcc->GetPictureContent(wsPicture, XFA_VALUEPICTURE_Edit);
+ CXFA_LocaleValue date(XFA_VT_DATE,
+ this->GetDoc()->GetXFADoc()->GetLocalMgr());
+ CFX_Unitime dt;
+ dt.Set(iYear, iMonth, iDay);
+ date.SetDate(dt);
+ CFX_WideString wsDate;
+ date.FormatPatterns(wsDate, wsPicture, m_pDataAcc->GetLocal(),
+ XFA_VALUEPICTURE_Edit);
+ CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)m_pNormalWidget;
+ pDateTime->SetEditText(wsDate);
+ pDateTime->Update();
+ GetDoc()->GetDocProvider()->SetFocusWidget(GetDoc(), NULL);
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Change;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
+}
+FWL_ERR CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) {
+ FX_DWORD dwEventID = pEvent->GetClassID();
+ if (dwEventID == FWL_EVTHASH_DTP_SelectChanged) {
+ CFWL_Event_DtpSelectChanged* event = (CFWL_Event_DtpSelectChanged*)pEvent;
+ OnSelectChanged(m_pNormalWidget->GetWidget(), event->iYear, event->iMonth,
+ event->iDay);
+ return TRUE;
+ } else {
+ return CXFA_FFTextEdit::OnProcessEvent(pEvent);
+ }
+}
diff --git a/xfa/src/fxfa/src/app/xfa_fftextedit.h b/xfa/src/fxfa/src/app/xfa_fftextedit.h
index 45fa8162ca..664aa5edc4 100644
--- a/xfa/src/fxfa/src/app/xfa_fftextedit.h
+++ b/xfa/src/fxfa/src/app/xfa_fftextedit.h
@@ -1,127 +1,127 @@
-// 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 _FXFA_FORMFILLER_TEXTEDIT_IMP_H
-#define _FXFA_FORMFILLER_TEXTEDIT_IMP_H
-class CXFA_FFTextEdit : public CXFA_FFField {
- public:
- CXFA_FFTextEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFTextEdit();
- virtual FX_BOOL LoadWidget();
- virtual void UpdateWidgetProperty();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget);
- virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
- virtual FX_BOOL CanUndo();
- virtual FX_BOOL CanRedo();
- virtual FX_BOOL Undo();
- virtual FX_BOOL Redo();
- virtual FX_BOOL CanCopy();
- virtual FX_BOOL CanCut();
- virtual FX_BOOL CanPaste();
- virtual FX_BOOL CanSelectAll();
- virtual FX_BOOL Copy(CFX_WideString& wsCopy);
- virtual FX_BOOL Cut(CFX_WideString& wsCut);
- virtual FX_BOOL Paste(const CFX_WideString& wsPaste);
- virtual FX_BOOL SelectAll();
- virtual FX_BOOL Delete();
- virtual FX_BOOL DeSelect();
- FX_BOOL GetSuggestWords(CFX_PointF pointf, CFX_ByteStringArray& sSuggest);
- FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf,
- const CFX_ByteStringC& bsReplace);
-
- protected:
- FX_DWORD GetAlignment();
- virtual FX_BOOL CommitData();
- virtual FX_BOOL UpdateFWLData();
- virtual FX_BOOL IsDataChanged();
- void ValidateNumberField(const CFX_WideString& wsText);
- IFWL_WidgetDelegate* m_pOldDelegate;
-
- public:
- void OnTextChanged(IFWL_Widget* pWidget,
- const CFX_WideString& wsChanged,
- const CFX_WideString& wsPrevText);
- void OnTextFull(IFWL_Widget* pWidget);
- void OnAddDoRecord(IFWL_Widget* pWidget);
- FX_BOOL CheckWord(const CFX_ByteStringC& sWord);
- FX_BOOL GetSuggestWords(const CFX_ByteStringC& sWord,
- CFX_ByteStringArray& sSuggest);
- virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
- virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
- const CFX_Matrix* pMatrix = NULL);
-};
-class CXFA_FFNumericEdit : public CXFA_FFTextEdit {
- public:
- CXFA_FFNumericEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFNumericEdit();
- virtual FX_BOOL LoadWidget();
- virtual void UpdateWidgetProperty();
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
-
- public:
- FX_BOOL OnValidate(IFWL_Widget* pWidget, CFX_WideString& wsText);
-};
-class CXFA_FFPasswordEdit : public CXFA_FFTextEdit {
- public:
- CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFPasswordEdit();
- virtual FX_BOOL LoadWidget();
- virtual void UpdateWidgetProperty();
-
- protected:
-};
-enum XFA_DATETIMETYPE {
- XFA_DATETIMETYPE_Date = 0,
- XFA_DATETIMETYPE_Time,
- XFA_DATETIMETYPE_DateAndTime
-};
-class CXFA_FFDateTimeEdit : public CXFA_FFTextEdit {
- public:
- CXFA_FFDateTimeEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFDateTimeEdit();
-
- virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus = FALSE);
- virtual FX_BOOL LoadWidget();
- virtual void UpdateWidgetProperty();
-
- virtual FX_BOOL CanUndo();
- virtual FX_BOOL CanRedo();
- virtual FX_BOOL Undo();
- virtual FX_BOOL Redo();
-
- virtual FX_BOOL CanCopy();
- virtual FX_BOOL CanCut();
- virtual FX_BOOL CanPaste();
- virtual FX_BOOL CanSelectAll();
- virtual FX_BOOL Copy(CFX_WideString& wsCopy);
- virtual FX_BOOL Cut(CFX_WideString& wsCut);
- virtual FX_BOOL Paste(const CFX_WideString& wsPaste);
- virtual FX_BOOL SelectAll();
- virtual FX_BOOL Delete();
- virtual FX_BOOL DeSelect();
-
- protected:
- FX_DWORD GetAlignment();
-
- virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL CommitData();
- virtual FX_BOOL UpdateFWLData();
- virtual FX_BOOL IsDataChanged();
-
- public:
- void OnSelectChanged(IFWL_Widget* pWidget,
- int32_t iYear,
- int32_t iMonth,
- int32_t iDay);
- virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
-};
-#endif
+// 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 _FXFA_FORMFILLER_TEXTEDIT_IMP_H
+#define _FXFA_FORMFILLER_TEXTEDIT_IMP_H
+class CXFA_FFTextEdit : public CXFA_FFField {
+ public:
+ CXFA_FFTextEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFTextEdit();
+ virtual FX_BOOL LoadWidget();
+ virtual void UpdateWidgetProperty();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget);
+ virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
+ virtual FX_BOOL CanUndo();
+ virtual FX_BOOL CanRedo();
+ virtual FX_BOOL Undo();
+ virtual FX_BOOL Redo();
+ virtual FX_BOOL CanCopy();
+ virtual FX_BOOL CanCut();
+ virtual FX_BOOL CanPaste();
+ virtual FX_BOOL CanSelectAll();
+ virtual FX_BOOL Copy(CFX_WideString& wsCopy);
+ virtual FX_BOOL Cut(CFX_WideString& wsCut);
+ virtual FX_BOOL Paste(const CFX_WideString& wsPaste);
+ virtual FX_BOOL SelectAll();
+ virtual FX_BOOL Delete();
+ virtual FX_BOOL DeSelect();
+ FX_BOOL GetSuggestWords(CFX_PointF pointf, CFX_ByteStringArray& sSuggest);
+ FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf,
+ const CFX_ByteStringC& bsReplace);
+
+ protected:
+ FX_DWORD GetAlignment();
+ virtual FX_BOOL CommitData();
+ virtual FX_BOOL UpdateFWLData();
+ virtual FX_BOOL IsDataChanged();
+ void ValidateNumberField(const CFX_WideString& wsText);
+ IFWL_WidgetDelegate* m_pOldDelegate;
+
+ public:
+ void OnTextChanged(IFWL_Widget* pWidget,
+ const CFX_WideString& wsChanged,
+ const CFX_WideString& wsPrevText);
+ void OnTextFull(IFWL_Widget* pWidget);
+ void OnAddDoRecord(IFWL_Widget* pWidget);
+ FX_BOOL CheckWord(const CFX_ByteStringC& sWord);
+ FX_BOOL GetSuggestWords(const CFX_ByteStringC& sWord,
+ CFX_ByteStringArray& sSuggest);
+ virtual int32_t OnProcessMessage(CFWL_Message* pMessage);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+ virtual FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics,
+ const CFX_Matrix* pMatrix = NULL);
+};
+class CXFA_FFNumericEdit : public CXFA_FFTextEdit {
+ public:
+ CXFA_FFNumericEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFNumericEdit();
+ virtual FX_BOOL LoadWidget();
+ virtual void UpdateWidgetProperty();
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+
+ public:
+ FX_BOOL OnValidate(IFWL_Widget* pWidget, CFX_WideString& wsText);
+};
+class CXFA_FFPasswordEdit : public CXFA_FFTextEdit {
+ public:
+ CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFPasswordEdit();
+ virtual FX_BOOL LoadWidget();
+ virtual void UpdateWidgetProperty();
+
+ protected:
+};
+enum XFA_DATETIMETYPE {
+ XFA_DATETIMETYPE_Date = 0,
+ XFA_DATETIMETYPE_Time,
+ XFA_DATETIMETYPE_DateAndTime
+};
+class CXFA_FFDateTimeEdit : public CXFA_FFTextEdit {
+ public:
+ CXFA_FFDateTimeEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFDateTimeEdit();
+
+ virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus = FALSE);
+ virtual FX_BOOL LoadWidget();
+ virtual void UpdateWidgetProperty();
+
+ virtual FX_BOOL CanUndo();
+ virtual FX_BOOL CanRedo();
+ virtual FX_BOOL Undo();
+ virtual FX_BOOL Redo();
+
+ virtual FX_BOOL CanCopy();
+ virtual FX_BOOL CanCut();
+ virtual FX_BOOL CanPaste();
+ virtual FX_BOOL CanSelectAll();
+ virtual FX_BOOL Copy(CFX_WideString& wsCopy);
+ virtual FX_BOOL Cut(CFX_WideString& wsCut);
+ virtual FX_BOOL Paste(const CFX_WideString& wsPaste);
+ virtual FX_BOOL SelectAll();
+ virtual FX_BOOL Delete();
+ virtual FX_BOOL DeSelect();
+
+ protected:
+ FX_DWORD GetAlignment();
+
+ virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL CommitData();
+ virtual FX_BOOL UpdateFWLData();
+ virtual FX_BOOL IsDataChanged();
+
+ public:
+ void OnSelectChanged(IFWL_Widget* pWidget,
+ int32_t iYear,
+ int32_t iMonth,
+ int32_t iDay);
+ virtual FWL_ERR OnProcessEvent(CFWL_Event* pEvent);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidget.cpp b/xfa/src/fxfa/src/app/xfa_ffwidget.cpp
index 08194bade1..f97e272b04 100644
--- a/xfa/src/fxfa/src/app/xfa_ffwidget.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffwidget.cpp
@@ -1,1959 +1,1959 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffpageview.h"
-#include "xfa_textlayout.h"
-CXFA_FFWidget::CXFA_FFWidget(CXFA_FFPageView* pPageView,
- CXFA_WidgetAcc* pDataAcc)
- : CXFA_ContentLayoutItem(pDataAcc->GetNode()),
- m_pPageView(pPageView),
- m_pDataAcc(pDataAcc) {
- m_rtWidget.Set(0, 0, 0, 0);
-}
-CXFA_FFWidget::~CXFA_FFWidget() {}
-IXFA_PageView* CXFA_FFWidget::GetPageView() {
- return m_pPageView;
-}
-void CXFA_FFWidget::SetPageView(IXFA_PageView* pPageView) {
- m_pPageView = static_cast<CXFA_FFPageView*>(pPageView);
-}
-void CXFA_FFWidget::GetWidgetRect(CFX_RectF& rtWidget) {
- if ((m_dwStatus & XFA_WIDGETSTATUS_RectCached) == 0) {
- m_dwStatus |= XFA_WIDGETSTATUS_RectCached;
- GetRect(m_rtWidget);
- }
- rtWidget = m_rtWidget;
-}
-CFX_RectF CXFA_FFWidget::ReCacheWidgetRect() {
- m_dwStatus |= XFA_WIDGETSTATUS_RectCached;
- GetRect(m_rtWidget);
- return m_rtWidget;
-}
-void CXFA_FFWidget::GetRectWithoutRotate(CFX_RectF& rtWidget) {
- GetWidgetRect(rtWidget);
- FX_FLOAT fValue = 0;
- switch (m_pDataAcc->GetRotate()) {
- case 90:
- rtWidget.top = rtWidget.bottom();
- fValue = rtWidget.width;
- rtWidget.width = rtWidget.height;
- rtWidget.height = fValue;
- break;
- case 180:
- rtWidget.left = rtWidget.right();
- rtWidget.top = rtWidget.bottom();
- break;
- case 270:
- rtWidget.left = rtWidget.right();
- fValue = rtWidget.width;
- rtWidget.width = rtWidget.height;
- rtWidget.height = fValue;
- break;
- }
-}
-FX_DWORD CXFA_FFWidget::GetStatus() {
- return m_dwStatus;
-}
-void CXFA_FFWidget::ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved) {
- m_dwStatus = (m_dwStatus & ~dwRemoved) | dwAdded;
-}
-FX_BOOL CXFA_FFWidget::GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus) {
- if (bDrawFocus) {
- return FALSE;
- }
-#ifndef _XFA_EMB
- if (m_pPageView) {
- m_pPageView->GetPageViewRect(rtBox);
- }
- return TRUE;
-#endif
- GetWidgetRect(rtBox);
- return TRUE;
-}
-CXFA_WidgetAcc* CXFA_FFWidget::GetDataAcc() {
- return m_pDataAcc;
-}
-FX_BOOL CXFA_FFWidget::GetToolTip(CFX_WideString& wsToolTip) {
- if (CXFA_Assist assist = m_pDataAcc->GetAssist()) {
- if (CXFA_ToolTip toolTip = assist.GetToolTip()) {
- return toolTip.GetTip(wsToolTip);
- }
- }
- return GetCaptionText(wsToolTip);
-}
-void CXFA_FFWidget::RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_DWORD dwStatus,
- int32_t iRotate) {
- if (!IsMatchVisibleStatus(dwStatus)) {
- return;
- }
- CXFA_Border border = m_pDataAcc->GetBorder();
- if (border) {
- CFX_RectF rtBorder;
- GetRectWithoutRotate(rtBorder);
- CXFA_Margin margin = border.GetMargin();
- if (margin.IsExistInXML()) {
- XFA_RectWidthoutMargin(rtBorder, margin);
- }
- rtBorder.Normalize();
- DrawBorder(pGS, border, rtBorder, pMatrix);
- }
-}
-FX_BOOL CXFA_FFWidget::IsLoaded() {
- return m_pPageView != NULL;
-}
-FX_BOOL CXFA_FFWidget::LoadWidget() {
- PerformLayout();
- return TRUE;
-}
-void CXFA_FFWidget::UnloadWidget() {}
-FX_BOOL CXFA_FFWidget::PerformLayout() {
- ReCacheWidgetRect();
- return TRUE;
-}
-FX_BOOL CXFA_FFWidget::UpdateFWLData() {
- return FALSE;
-}
-void CXFA_FFWidget::UpdateWidgetProperty() {}
-void CXFA_FFWidget::DrawBorder(CFX_Graphics* pGS,
- CXFA_Box box,
- const CFX_RectF& rtBorder,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags) {
- XFA_DrawBox(box, pGS, rtBorder, pMatrix, dwFlags);
-}
-void CXFA_FFWidget::InvalidateWidget(const CFX_RectF* pRect) {
- if (!pRect) {
- CFX_RectF rtWidget;
- GetBBox(rtWidget, XFA_WIDGETSTATUS_Focused);
- rtWidget.Inflate(2, 2);
- GetDoc()->GetDocProvider()->InvalidateRect(m_pPageView, rtWidget,
- XFA_INVALIDATE_CurrentPage);
- } else {
- GetDoc()->GetDocProvider()->InvalidateRect(m_pPageView, *pRect,
- XFA_INVALIDATE_CurrentPage);
- }
-}
-void CXFA_FFWidget::AddInvalidateRect(const CFX_RectF* pRect) {
- CFX_RectF rtWidget;
- if (pRect) {
- rtWidget = *pRect;
- } else {
- GetBBox(rtWidget, XFA_WIDGETSTATUS_Focused);
- rtWidget.Inflate(2, 2);
- }
- m_pDocView->AddInvalidateRect(m_pPageView, rtWidget);
-}
-FX_BOOL CXFA_FFWidget::GetCaptionText(CFX_WideString& wsCap) {
- CXFA_TextLayout* pCapTextlayout = m_pDataAcc->GetCaptionTextLayout();
- if (!pCapTextlayout) {
- return FALSE;
- }
- pCapTextlayout->GetText(wsCap);
- return TRUE;
-}
-FX_BOOL CXFA_FFWidget::IsFocused() {
- return m_dwStatus & XFA_WIDGETSTATUS_Focused;
-}
-FX_BOOL CXFA_FFWidget::OnMouseEnter() {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnMouseExit() {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnLButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnLButtonDblClk(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnMouseWheel(FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnRButtonDown(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnRButtonDblClk(FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return FALSE;
-}
-
-FX_BOOL CXFA_FFWidget::OnSetFocus(CXFA_FFWidget* pOldWidget) {
- CXFA_FFWidget* pParent = GetParent();
- if (pParent != NULL && !pParent->IsAncestorOf(pOldWidget)) {
- pParent->OnSetFocus(pOldWidget);
- }
- m_dwStatus |= XFA_WIDGETSTATUS_Focused;
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Enter;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Enter, &eParam);
- return TRUE;
-}
-FX_BOOL CXFA_FFWidget::OnKillFocus(CXFA_FFWidget* pNewWidget) {
- m_dwStatus &= ~XFA_WIDGETSTATUS_Focused;
- EventKillFocus();
- if (pNewWidget != NULL) {
- CXFA_FFWidget* pParent = GetParent();
- if (pParent != NULL && !pParent->IsAncestorOf(pNewWidget)) {
- pParent->OnKillFocus(pNewWidget);
- }
- }
- return TRUE;
-}
-FX_BOOL CXFA_FFWidget::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) {
- return FALSE;
-}
-FX_DWORD CXFA_FFWidget::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) {
- return FALSE;
-}
-void CXFA_FFWidget::Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy) {
- CFX_Matrix mt;
- GetRotateMatrix(mt);
- if (mt.IsIdentity()) {
- return;
- }
- CFX_Matrix mtReverse;
- mtReverse.SetReverse(mt);
- mtReverse.TransformPoint(fx, fy);
-}
-static void XFA_GetMatrix(CFX_Matrix& m,
- int32_t iRotate,
- int32_t at,
- const CFX_RectF& rt) {
- if (!iRotate) {
- return;
- }
- FX_FLOAT fAnchorX, fAnchorY;
- switch (at) {
- case XFA_ATTRIBUTEENUM_TopLeft:
- fAnchorX = rt.left, fAnchorY = rt.top;
- break;
- case XFA_ATTRIBUTEENUM_TopCenter:
- fAnchorX = (rt.left + rt.right()) / 2, fAnchorY = rt.top;
- break;
- case XFA_ATTRIBUTEENUM_TopRight:
- fAnchorX = rt.right(), fAnchorY = rt.top;
- break;
- case XFA_ATTRIBUTEENUM_MiddleLeft:
- fAnchorX = rt.left, fAnchorY = (rt.top + rt.bottom()) / 2;
- break;
- case XFA_ATTRIBUTEENUM_MiddleCenter:
- fAnchorX = (rt.left + rt.right()) / 2,
- fAnchorY = (rt.top + rt.bottom()) / 2;
- break;
- case XFA_ATTRIBUTEENUM_MiddleRight:
- fAnchorX = rt.right(), fAnchorY = (rt.top + rt.bottom()) / 2;
- break;
- case XFA_ATTRIBUTEENUM_BottomLeft:
- fAnchorX = rt.left, fAnchorY = rt.bottom();
- break;
- case XFA_ATTRIBUTEENUM_BottomCenter:
- fAnchorX = (rt.left + rt.right()) / 2, fAnchorY = rt.bottom();
- break;
- case XFA_ATTRIBUTEENUM_BottomRight:
- fAnchorX = rt.right(), fAnchorY = rt.bottom();
- break;
- }
- switch (iRotate) {
- case 90:
- m.a = 0, m.b = -1, m.c = 1, m.d = 0, m.e = fAnchorX - fAnchorY,
- m.f = fAnchorX + fAnchorY;
- break;
- case 180:
- m.a = -1, m.b = 0, m.c = 0, m.d = -1, m.e = fAnchorX * 2,
- m.f = fAnchorY * 2;
- break;
- case 270:
- m.a = 0, m.b = 1, m.c = -1, m.d = 0, m.e = fAnchorX + fAnchorY,
- m.f = fAnchorY - fAnchorX;
- break;
- }
-}
-void CXFA_FFWidget::GetRotateMatrix(CFX_Matrix& mt) {
- mt.Set(1, 0, 0, 1, 0, 0);
- int32_t iRotate = m_pDataAcc->GetRotate();
- if (!iRotate) {
- return;
- }
- CFX_RectF rcWidget;
- GetRectWithoutRotate(rcWidget);
- XFA_ATTRIBUTEENUM at = XFA_ATTRIBUTEENUM_TopLeft;
- XFA_GetMatrix(mt, iRotate, at, rcWidget);
-}
-FX_BOOL CXFA_FFWidget::IsLayoutRectEmpty() {
- CFX_RectF rtLayout;
- GetRectWithoutRotate(rtLayout);
- return rtLayout.width < 0.1f && rtLayout.height < 0.1f;
-}
-CXFA_FFWidget* CXFA_FFWidget::GetParent() {
- CXFA_Node* pParentNode =
- m_pDataAcc->GetNode()->GetNodeItem(XFA_NODEITEM_Parent);
- if (pParentNode != NULL) {
- CXFA_WidgetAcc* pParentWidgetAcc =
- (CXFA_WidgetAcc*)pParentNode->GetWidgetData();
- if (pParentWidgetAcc != NULL) {
- return pParentWidgetAcc->GetNextWidget(NULL);
- }
- }
- return NULL;
-}
-FX_BOOL CXFA_FFWidget::IsAncestorOf(CXFA_FFWidget* pWidget) {
- if (!pWidget) {
- return FALSE;
- }
- CXFA_Node* pNode = m_pDataAcc->GetNode();
- CXFA_Node* pChildNode = pWidget->GetDataAcc()->GetNode();
- while (pChildNode) {
- if (pChildNode == pNode) {
- return TRUE;
- }
- pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_Parent);
- }
- return FALSE;
-}
-FX_BOOL CXFA_FFWidget::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
- CFX_RectF rtWidget;
- GetWidgetRect(rtWidget);
- if (rtWidget.Contains(fx, fy)) {
- return TRUE;
- }
- return FALSE;
-}
-CXFA_FFDocView* CXFA_FFWidget::GetDocView() {
- return m_pDocView;
-}
-CXFA_FFDoc* CXFA_FFWidget::GetDoc() {
- return (CXFA_FFDoc*)m_pDocView->GetDoc();
-}
-CXFA_FFApp* CXFA_FFWidget::GetApp() {
- return GetDoc()->GetApp();
-}
-IXFA_AppProvider* CXFA_FFWidget::GetAppProvider() {
- return GetApp()->GetAppProvider();
-}
-void CXFA_FFWidget::GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth) {
- fMinWidth = fMaxWidth = 0;
- FX_FLOAT fWidth = 0;
- if (m_pDataAcc->GetWidth(fWidth)) {
- fMinWidth = fMaxWidth = fWidth;
- } else {
- m_pDataAcc->GetMinWidth(fMinWidth);
- m_pDataAcc->GetMaxWidth(fMaxWidth);
- }
-}
-void CXFA_FFWidget::GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight) {
- fMinHeight = fMaxHeight = 0;
- FX_FLOAT fHeight = 0;
- if (m_pDataAcc->GetHeight(fHeight)) {
- fMinHeight = fMaxHeight = fHeight;
- } else {
- m_pDataAcc->GetMinHeight(fMinHeight);
- m_pDataAcc->GetMaxHeight(fMaxHeight);
- }
-}
-FX_BOOL CXFA_FFWidget::IsMatchVisibleStatus(FX_DWORD dwStatus) {
- return m_dwStatus & XFA_WIDGETSTATUS_Visible;
-}
-void CXFA_FFWidget::EventKillFocus() {
- if (m_dwStatus & XFA_WIDGETSTATUS_Access) {
- m_dwStatus &= ~XFA_WIDGETSTATUS_Access;
- return;
- }
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Exit;
- eParam.m_pTarget = m_pDataAcc;
- m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Exit, &eParam);
-}
-FX_BOOL CXFA_FFWidget::IsButtonDown() {
- return (m_dwStatus & XFA_WIDGETSTATUS_ButtonDown) != 0;
-}
-void CXFA_FFWidget::SetButtonDown(FX_BOOL bSet) {
- bSet ? m_dwStatus |= XFA_WIDGETSTATUS_ButtonDown
- : m_dwStatus &= ~XFA_WIDGETSTATUS_ButtonDown;
-}
-int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics,
- int32_t iStrokeType,
- int32_t iCapType) {
- switch (iStrokeType) {
- case XFA_ATTRIBUTEENUM_DashDot: {
- FX_FLOAT dashArray[] = {4, 1, 2, 1};
- if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
- dashArray[1] = 2;
- dashArray[3] = 2;
- }
- pGraphics->SetLineDash(0, dashArray, 4);
- return FX_DASHSTYLE_DashDot;
- }
- case XFA_ATTRIBUTEENUM_DashDotDot: {
- FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1};
- if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
- dashArray[1] = 2;
- dashArray[3] = 2;
- dashArray[5] = 2;
- }
- pGraphics->SetLineDash(0, dashArray, 6);
- return FX_DASHSTYLE_DashDotDot;
- }
- case XFA_ATTRIBUTEENUM_Dashed: {
- FX_FLOAT dashArray[] = {5, 1};
- if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
- dashArray[1] = 2;
- }
- pGraphics->SetLineDash(0, dashArray, 2);
- return FX_DASHSTYLE_Dash;
- }
- case XFA_ATTRIBUTEENUM_Dotted: {
- FX_FLOAT dashArray[] = {2, 1};
- if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
- dashArray[1] = 2;
- }
- pGraphics->SetLineDash(0, dashArray, 2);
- return FX_DASHSTYLE_Dot;
- }
- default:
- break;
- }
- pGraphics->SetLineDash(FX_DASHSTYLE_Solid);
- return FX_DASHSTYLE_Solid;
-}
-CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap) {
- switch (iLineCap) {
- case XFA_ATTRIBUTEENUM_Round:
- return CFX_GraphStateData::LineCapRound;
- case XFA_ATTRIBUTEENUM_Butt:
- return CFX_GraphStateData::LineCapButt;
- default:
- break;
- }
- return CFX_GraphStateData::LineCapSquare;
-}
-class CXFA_ImageRenderer {
- public:
- CXFA_ImageRenderer();
- ~CXFA_ImageRenderer();
- FX_BOOL Start(CFX_RenderDevice* pDevice,
- CFX_DIBSource* pDIBSource,
- FX_ARGB bitmap_argb,
- int bitmap_alpha,
- const CFX_Matrix* pImage2Device,
- FX_DWORD flags,
- int blendType = FXDIB_BLEND_NORMAL);
- FX_BOOL Continue(IFX_Pause* pPause);
-
- protected:
- CFX_RenderDevice* m_pDevice;
- int m_Status;
- CFX_Matrix m_ImageMatrix;
- CFX_DIBSource* m_pDIBSource;
- CFX_DIBitmap* m_pCloneConvert;
- int m_BitmapAlpha;
- FX_ARGB m_FillArgb;
- FX_DWORD m_Flags;
- CFX_ImageTransformer* m_pTransformer;
- void* m_DeviceHandle;
- int32_t m_BlendType;
- FX_BOOL m_Result;
- FX_BOOL m_bPrint;
- FX_BOOL StartDIBSource();
- void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
- int left,
- int top,
- FX_ARGB mask_argb,
- int bitmap_alpha,
- int blend_mode,
- int Transparency);
-};
-CXFA_ImageRenderer::CXFA_ImageRenderer() {
- m_pDevice = NULL;
- m_Status = 0;
- m_pDIBSource = NULL;
- m_pCloneConvert = NULL;
- m_BitmapAlpha = 255;
- m_FillArgb = 0;
- m_Flags = 0;
- m_pTransformer = NULL;
- m_DeviceHandle = NULL;
- m_BlendType = FXDIB_BLEND_NORMAL;
- m_Result = TRUE;
- m_bPrint = FALSE;
-}
-CXFA_ImageRenderer::~CXFA_ImageRenderer() {
- if (m_pCloneConvert) {
- delete m_pCloneConvert;
- }
- if (m_pTransformer) {
- delete m_pTransformer;
- }
- if (m_DeviceHandle) {
- m_pDevice->CancelDIBits(m_DeviceHandle);
- }
-}
-FX_BOOL CXFA_ImageRenderer::Start(CFX_RenderDevice* pDevice,
- CFX_DIBSource* pDIBSource,
- FX_ARGB bitmap_argb,
- int bitmap_alpha,
- const CFX_Matrix* pImage2Device,
- FX_DWORD flags,
- int blendType) {
- m_pDevice = pDevice;
- m_pDIBSource = pDIBSource;
- m_FillArgb = bitmap_argb;
- m_BitmapAlpha = bitmap_alpha;
- m_ImageMatrix = *pImage2Device;
- m_Flags = flags;
- m_BlendType = blendType;
- return StartDIBSource();
-}
-FX_BOOL CXFA_ImageRenderer::StartDIBSource() {
- if (m_pDevice->StartDIBits(m_pDIBSource, m_BitmapAlpha, m_FillArgb,
- &m_ImageMatrix, m_Flags, m_DeviceHandle, 0, NULL,
- m_BlendType)) {
- if (m_DeviceHandle != NULL) {
- m_Status = 3;
- return TRUE;
- }
- return FALSE;
- }
- CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
- FX_RECT image_rect = image_rect_f.GetOutterRect();
- int dest_width = image_rect.Width();
- int dest_height = image_rect.Height();
- if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
- (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0)) {
- if (m_bPrint && !(m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
- m_Result = FALSE;
- return FALSE;
- }
- CFX_DIBSource* pDib = m_pDIBSource;
- if (m_pDIBSource->HasAlpha() &&
- !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_IMAGE) &&
- !(m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) {
- m_pCloneConvert = m_pDIBSource->CloneConvert(FXDIB_Rgb);
- if (!m_pCloneConvert) {
- m_Result = FALSE;
- return FALSE;
- }
- pDib = m_pCloneConvert;
- }
- FX_RECT clip_box = m_pDevice->GetClipBox();
- clip_box.Intersect(image_rect);
- m_Status = 2;
- m_pTransformer = new CFX_ImageTransformer;
- m_pTransformer->Start(pDib, &m_ImageMatrix, m_Flags, &clip_box);
- return TRUE;
- }
- if (m_ImageMatrix.a < 0) {
- dest_width = -dest_width;
- }
- if (m_ImageMatrix.d > 0) {
- dest_height = -dest_height;
- }
- int dest_left, dest_top;
- dest_left = dest_width > 0 ? image_rect.left : image_rect.right;
- dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;
- if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) {
- if (m_pDevice->StretchDIBits(m_pDIBSource, dest_left, dest_top, dest_width,
- dest_height, m_Flags, NULL, m_BlendType)) {
- return FALSE;
- }
- }
- if (m_pDIBSource->IsAlphaMask()) {
- if (m_BitmapAlpha != 255) {
- m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
- }
- if (m_pDevice->StretchBitMask(m_pDIBSource, dest_left, dest_top, dest_width,
- dest_height, m_FillArgb, m_Flags)) {
- return FALSE;
- }
- }
- if (m_bPrint && !(m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
- m_Result = FALSE;
- return TRUE;
- }
- FX_RECT clip_box = m_pDevice->GetClipBox();
- FX_RECT dest_rect = clip_box;
- dest_rect.Intersect(image_rect);
- FX_RECT dest_clip(
- dest_rect.left - image_rect.left, dest_rect.top - image_rect.top,
- dest_rect.right - image_rect.left, dest_rect.bottom - image_rect.top);
- CFX_DIBitmap* pStretched =
- m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip);
- if (pStretched) {
- CompositeDIBitmap(pStretched, dest_rect.left, dest_rect.top, m_FillArgb,
- m_BitmapAlpha, m_BlendType, FALSE);
- delete pStretched;
- pStretched = NULL;
- }
- return FALSE;
-}
-FX_BOOL CXFA_ImageRenderer::Continue(IFX_Pause* pPause) {
- if (m_Status == 2) {
- if (m_pTransformer->Continue(pPause)) {
- return TRUE;
- }
- CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
- if (pBitmap == NULL) {
- return FALSE;
- }
- if (pBitmap->IsAlphaMask()) {
- if (m_BitmapAlpha != 255) {
- m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
- }
- m_Result = m_pDevice->SetBitMask(pBitmap, m_pTransformer->m_ResultLeft,
- m_pTransformer->m_ResultTop, m_FillArgb);
- } else {
- if (m_BitmapAlpha != 255) {
- pBitmap->MultiplyAlpha(m_BitmapAlpha);
- }
- m_Result = m_pDevice->SetDIBits(pBitmap, m_pTransformer->m_ResultLeft,
- m_pTransformer->m_ResultTop, m_BlendType);
- }
- delete pBitmap;
- return FALSE;
- } else if (m_Status == 3) {
- return m_pDevice->ContinueDIBits(m_DeviceHandle, pPause);
- }
- return FALSE;
-}
-void CXFA_ImageRenderer::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
- int left,
- int top,
- FX_ARGB mask_argb,
- int bitmap_alpha,
- int blend_mode,
- int Transparency) {
- if (pDIBitmap == NULL) {
- return;
- }
- FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED;
- FX_BOOL bGroup = Transparency & PDFTRANS_GROUP;
- if (blend_mode == FXDIB_BLEND_NORMAL) {
- if (!pDIBitmap->IsAlphaMask()) {
- if (bitmap_alpha < 255) {
- pDIBitmap->MultiplyAlpha(bitmap_alpha);
- }
- if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
- return;
- }
- } else {
- FX_DWORD fill_argb = (mask_argb);
- if (bitmap_alpha < 255) {
- ((uint8_t*)&fill_argb)[3] =
- ((uint8_t*)&fill_argb)[3] * bitmap_alpha / 255;
- }
- if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
- return;
- }
- }
- }
- FX_BOOL bBackAlphaRequired = blend_mode && bIsolated;
- FX_BOOL bGetBackGround =
- ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) ||
- (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) &&
- (m_pDevice->GetRenderCaps() & FXRC_GET_BITS) && !bBackAlphaRequired);
- if (bGetBackGround) {
- if (bIsolated || !bGroup) {
- if (pDIBitmap->IsAlphaMask()) {
- return;
- }
- m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode);
- } else {
- FX_RECT rect(left, top, left + pDIBitmap->GetWidth(),
- top + pDIBitmap->GetHeight());
- rect.Intersect(m_pDevice->GetClipBox());
- CFX_DIBitmap* pClone = NULL;
- FX_BOOL bClone = FALSE;
- if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) {
- bClone = TRUE;
- pClone = m_pDevice->GetBackDrop()->Clone(&rect);
- CFX_DIBitmap* pForeBitmap = m_pDevice->GetBitmap();
- pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
- pForeBitmap, rect.left, rect.top);
- left = left >= 0 ? 0 : left;
- top = top >= 0 ? 0 : top;
- if (!pDIBitmap->IsAlphaMask())
- pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
- pDIBitmap, left, top, blend_mode);
- else
- pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetHeight(),
- pDIBitmap, mask_argb, left, top, blend_mode);
- } else {
- pClone = pDIBitmap;
- }
- if (m_pDevice->GetBackDrop()) {
- m_pDevice->SetDIBits(pClone, rect.left, rect.top);
- } else {
- if (pDIBitmap->IsAlphaMask()) {
- return;
- }
- m_pDevice->SetDIBits(pDIBitmap, rect.left, rect.top, blend_mode);
- }
- if (bClone) {
- delete pClone;
- }
- }
- return;
- }
- if (pDIBitmap->HasAlpha() &&
- !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_IMAGE)) {
- CFX_DIBitmap* pCloneConvert = pDIBitmap->CloneConvert(FXDIB_Rgb);
- if (!pCloneConvert) {
- return;
- }
- CXFA_ImageRenderer imageRender;
- FX_BOOL bRet = imageRender.Start(m_pDevice, pCloneConvert, m_FillArgb,
- m_BitmapAlpha, &m_ImageMatrix, m_Flags);
- while (bRet) {
- bRet = imageRender.Continue(NULL);
- }
- delete pCloneConvert;
- return;
- }
-}
-void XFA_DrawImage(CFX_Graphics* pGS,
- const CFX_RectF& rtImage,
- CFX_Matrix* pMatrix,
- CFX_DIBitmap* pDIBitmap,
- int32_t iAspect,
- int32_t iImageXDpi,
- int32_t iImageYDpi,
- int32_t iHorzAlign,
- int32_t iVertAlign) {
- if (rtImage.IsEmpty()) {
- return;
- }
- if (!pDIBitmap || !pDIBitmap->GetBuffer()) {
- return;
- }
- FX_FLOAT fWidth =
- XFA_UnitPx2Pt((FX_FLOAT)pDIBitmap->GetWidth(), (FX_FLOAT)iImageXDpi);
- FX_FLOAT fHeight =
- XFA_UnitPx2Pt((FX_FLOAT)pDIBitmap->GetHeight(), (FX_FLOAT)iImageYDpi);
- CFX_RectF rtFit;
- rtFit.Set(rtImage.left, rtImage.top, fWidth, fHeight);
- switch (iAspect) {
- case XFA_ATTRIBUTEENUM_Fit: {
- FX_FLOAT f1 = rtImage.height / rtFit.height;
- FX_FLOAT f2 = rtImage.width / rtFit.width;
- f1 = std::min(f1, f2);
- rtFit.height = rtFit.height * f1;
- rtFit.width = rtFit.width * f1;
- } break;
- case XFA_ATTRIBUTEENUM_Actual:
- break;
- case XFA_ATTRIBUTEENUM_Height: {
- FX_FLOAT f1 = rtImage.height / rtFit.height;
- rtFit.height = rtImage.height;
- rtFit.width = f1 * rtFit.width;
- } break;
- case XFA_ATTRIBUTEENUM_None:
- rtFit.height = rtImage.height;
- rtFit.width = rtImage.width;
- break;
- case XFA_ATTRIBUTEENUM_Width: {
- FX_FLOAT f1 = rtImage.width / rtFit.width;
- rtFit.width = rtImage.width;
- rtFit.height = rtFit.height * f1;
- } break;
- }
- if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) {
- rtFit.left += (rtImage.width - rtFit.width) / 2;
- } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) {
- rtFit.left = rtImage.right() - rtFit.width;
- }
- if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) {
- rtFit.top += (rtImage.height - rtFit.height) / 2;
- } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) {
- rtFit.top = rtImage.bottom() - rtImage.height;
- }
- CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
- pRenderDevice->SaveState();
- CFX_PathData path;
- path.AppendRect(rtImage.left, rtImage.bottom(), rtImage.right(), rtImage.top);
- pRenderDevice->SetClip_PathFill(&path, pMatrix, FXFILL_WINDING);
- CFX_Matrix mtImage(1, 0, 0, -1, 0, 1);
- mtImage.Concat(rtFit.width, 0, 0, rtFit.height, rtFit.left, rtFit.top);
- mtImage.Concat(*pMatrix);
- CXFA_ImageRenderer imageRender;
- FX_BOOL bRet = imageRender.Start(pRenderDevice, pDIBitmap, 0, 255, &mtImage,
- FXDIB_INTERPOL);
- while (bRet) {
- bRet = imageRender.Continue(NULL);
- }
- pRenderDevice->RestoreState();
-}
-const static uint8_t g_inv_base64[128] = {
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255,
- 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,
- 255, 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 255, 255, 255, 255, 255,
-};
-static uint8_t* XFA_RemoveBase64Whitespace(const uint8_t* pStr, int32_t iLen) {
- uint8_t* pCP;
- int32_t i = 0, j = 0;
- if (iLen == 0) {
- iLen = FXSYS_strlen((FX_CHAR*)pStr);
- }
- pCP = FX_Alloc(uint8_t, iLen + 1);
- for (; i < iLen; i++) {
- if ((pStr[i] & 128) == 0) {
- if (g_inv_base64[pStr[i]] != 0xFF || pStr[i] == '=') {
- pCP[j++] = pStr[i];
- }
- }
- }
- pCP[j] = '\0';
- return pCP;
-}
-static int32_t XFA_Base64Decode(const FX_CHAR* pStr, uint8_t* pOutBuffer) {
- if (pStr == NULL) {
- return 0;
- }
- uint8_t* pBuffer =
- XFA_RemoveBase64Whitespace((uint8_t*)pStr, FXSYS_strlen((FX_CHAR*)pStr));
- if (pBuffer == NULL) {
- return 0;
- }
- int32_t iLen = FXSYS_strlen((FX_CHAR*)pBuffer);
- int32_t i = 0, j = 0;
- FX_DWORD dwLimb = 0;
- for (; i + 3 < iLen; i += 4) {
- if (pBuffer[i] == '=' || pBuffer[i + 1] == '=' || pBuffer[i + 2] == '=' ||
- pBuffer[i + 3] == '=') {
- if (pBuffer[i] == '=' || pBuffer[i + 1] == '=') {
- break;
- }
- if (pBuffer[i + 2] == '=') {
- dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 6) |
- ((FX_DWORD)g_inv_base64[pBuffer[i + 1]]);
- pOutBuffer[j] = (uint8_t)(dwLimb >> 4) & 0xFF;
- j++;
- } else {
- dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 12) |
- ((FX_DWORD)g_inv_base64[pBuffer[i + 1]] << 6) |
- ((FX_DWORD)g_inv_base64[pBuffer[i + 2]]);
- pOutBuffer[j] = (uint8_t)(dwLimb >> 10) & 0xFF;
- pOutBuffer[j + 1] = (uint8_t)(dwLimb >> 2) & 0xFF;
- j += 2;
- }
- } else {
- dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 18) |
- ((FX_DWORD)g_inv_base64[pBuffer[i + 1]] << 12) |
- ((FX_DWORD)g_inv_base64[pBuffer[i + 2]] << 6) |
- ((FX_DWORD)g_inv_base64[pBuffer[i + 3]]);
- pOutBuffer[j] = (uint8_t)(dwLimb >> 16) & 0xff;
- pOutBuffer[j + 1] = (uint8_t)(dwLimb >> 8) & 0xff;
- pOutBuffer[j + 2] = (uint8_t)(dwLimb)&0xff;
- j += 3;
- }
- }
- FX_Free(pBuffer);
- return j;
-}
-static FX_CHAR g_base64_chars[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len) {
- FX_CHAR* out = NULL;
- int i, j;
- FX_DWORD limb;
- out = FX_Alloc(FX_CHAR, ((buf_len * 8 + 5) / 6) + 5);
- for (i = 0, j = 0, limb = 0; i + 2 < buf_len; i += 3, j += 4) {
- limb = ((FX_DWORD)buf[i] << 16) | ((FX_DWORD)buf[i + 1] << 8) |
- ((FX_DWORD)buf[i + 2]);
- out[j] = g_base64_chars[(limb >> 18) & 63];
- out[j + 1] = g_base64_chars[(limb >> 12) & 63];
- out[j + 2] = g_base64_chars[(limb >> 6) & 63];
- out[j + 3] = g_base64_chars[(limb)&63];
- }
- switch (buf_len - i) {
- case 0:
- break;
- case 1:
- limb = ((FX_DWORD)buf[i]);
- out[j++] = g_base64_chars[(limb >> 2) & 63];
- out[j++] = g_base64_chars[(limb << 4) & 63];
- out[j++] = '=';
- out[j++] = '=';
- break;
- case 2:
- limb = ((FX_DWORD)buf[i] << 8) | ((FX_DWORD)buf[i + 1]);
- out[j++] = g_base64_chars[(limb >> 10) & 63];
- out[j++] = g_base64_chars[(limb >> 4) & 63];
- out[j++] = g_base64_chars[(limb << 2) & 63];
- out[j++] = '=';
- break;
- default:
- break;
- }
- out[j] = '\0';
- return out;
-}
-FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideStringC& wsType) {
- CFX_WideString wsContentType(wsType);
- wsContentType.MakeLower();
- if (wsContentType == FX_WSTRC(L"image/jpg")) {
- return FXCODEC_IMAGE_JPG;
- }
- if (wsContentType == FX_WSTRC(L"image/png")) {
- return FXCODEC_IMAGE_PNG;
- }
- if (wsContentType == FX_WSTRC(L"image/gif")) {
- return FXCODEC_IMAGE_GIF;
- }
- if (wsContentType == FX_WSTRC(L"image/bmp")) {
- return FXCODEC_IMAGE_BMP;
- }
- if (wsContentType == FX_WSTRC(L"image/tif")) {
- return FXCODEC_IMAGE_TIF;
- }
- return FXCODEC_IMAGE_UNKNOWN;
-}
-CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc,
- CXFA_Image* pImage,
- FX_BOOL& bNameImage,
- int32_t& iImageXDpi,
- int32_t& iImageYDpi) {
- CFX_WideString wsHref;
- pImage->GetHref(wsHref);
- CFX_WideString wsImage;
- pImage->GetContent(wsImage);
- if (wsHref.IsEmpty() && wsImage.IsEmpty()) {
- return NULL;
- }
- CFX_WideString wsContentType;
- pImage->GetContentType(wsContentType);
- FXCODEC_IMAGE_TYPE type = XFA_GetImageType(wsContentType);
- CFX_ByteString bsContent;
- uint8_t* pImageBuffer = NULL;
- IFX_FileRead* pImageFileRead = NULL;
- if (wsImage.GetLength() > 0) {
- XFA_ATTRIBUTEENUM iEncoding =
- (XFA_ATTRIBUTEENUM)pImage->GetTransferEncoding();
- if (iEncoding == XFA_ATTRIBUTEENUM_Base64) {
- CFX_ByteString bsData = wsImage.UTF8Encode();
- int32_t iLength = bsData.GetLength();
- pImageBuffer = FX_Alloc(uint8_t, iLength);
- int32_t iRead = XFA_Base64Decode((const FX_CHAR*)bsData, pImageBuffer);
- if (iRead > 0) {
- pImageFileRead = FX_CreateMemoryStream(pImageBuffer, iRead);
- }
- } else {
- bsContent = CFX_ByteString::FromUnicode(wsImage);
- pImageFileRead = FX_CreateMemoryStream(
- (uint8_t*)(const uint8_t*)bsContent, bsContent.GetLength());
- }
- } else {
- CFX_WideString wsURL = wsHref;
- if (wsURL.Left(7) != FX_WSTRC(L"http://") &&
- wsURL.Left(6) != FX_WSTRC(L"ftp://")) {
- CFX_DIBitmap* pBitmap =
- pDoc->GetPDFNamedImage(wsURL, iImageXDpi, iImageYDpi);
- if (pBitmap != NULL) {
- bNameImage = TRUE;
- return pBitmap;
- }
- }
- pImageFileRead = pDoc->GetDocProvider()->OpenLinkedFile(pDoc, wsURL);
- }
- if (!pImageFileRead) {
- FX_Free(pImageBuffer);
- return NULL;
- }
- bNameImage = FALSE;
- CFX_DIBitmap* pBitmap =
- XFA_LoadImageFromBuffer(pImageFileRead, type, iImageXDpi, iImageYDpi);
- FX_Free(pImageBuffer);
- pImageFileRead->Release();
- return pBitmap;
-}
-static FXDIB_Format XFA_GetDIBFormat(FXCODEC_IMAGE_TYPE type,
- int32_t iComponents,
- int32_t iBitsPerComponent) {
- FXDIB_Format dibFormat = FXDIB_Argb;
- switch (type) {
- case FXCODEC_IMAGE_BMP:
- case FXCODEC_IMAGE_JPG:
- case FXCODEC_IMAGE_TIF: {
- dibFormat = FXDIB_Rgb32;
- int32_t bpp = iComponents * iBitsPerComponent;
- if (bpp <= 24) {
- dibFormat = FXDIB_Rgb;
- }
- } break;
- case FXCODEC_IMAGE_PNG:
- default:
- break;
- }
- return dibFormat;
-}
-CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
- FXCODEC_IMAGE_TYPE type,
- int32_t& iImageXDpi,
- int32_t& iImageYDpi) {
- CFX_GEModule* pGeModule = CFX_GEModule::Get();
- if (!pGeModule) {
- return NULL;
- }
- CCodec_ModuleMgr* pCodecMgr = pGeModule->GetCodecModule();
- if (!pCodecMgr) {
- return NULL;
- }
- CFX_DIBAttribute dibAttr;
- CFX_DIBitmap* pBitmap = NULL;
- ICodec_ProgressiveDecoder* pProgressiveDecoder =
- pCodecMgr->CreateProgressiveDecoder();
- pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr);
- switch (dibAttr.m_wDPIUnit) {
- case FXCODEC_RESUNIT_CENTIMETER:
- dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI * 2.54f);
- dibAttr.m_nYDPI = (int32_t)(dibAttr.m_nYDPI * 2.54f);
- break;
- case FXCODEC_RESUNIT_METER:
- dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI / (FX_FLOAT)100 * 2.54f);
- dibAttr.m_nYDPI = (int32_t)(dibAttr.m_nYDPI / (FX_FLOAT)100 * 2.54f);
- break;
- ;
- default:
- break;
- }
- iImageXDpi = dibAttr.m_nXDPI > 1 ? dibAttr.m_nXDPI : (96);
- iImageYDpi = dibAttr.m_nYDPI > 1 ? dibAttr.m_nYDPI : (96);
- if (pProgressiveDecoder->GetWidth() > 0 &&
- pProgressiveDecoder->GetHeight() > 0) {
- type = pProgressiveDecoder->GetType();
- int32_t iComponents = pProgressiveDecoder->GetNumComponents();
- int32_t iBpc = pProgressiveDecoder->GetBPC();
- FXDIB_Format dibFormat = XFA_GetDIBFormat(type, iComponents, iBpc);
- pBitmap = new CFX_DIBitmap();
- pBitmap->Create(pProgressiveDecoder->GetWidth(),
- pProgressiveDecoder->GetHeight(), dibFormat);
- pBitmap->Clear(0xffffffff);
- int32_t nFrames;
- if ((pProgressiveDecoder->GetFrames(nFrames) ==
- FXCODEC_STATUS_DECODE_READY) &&
- (nFrames > 0)) {
- pProgressiveDecoder->StartDecode(pBitmap, 0, 0, pBitmap->GetWidth(),
- pBitmap->GetHeight());
- pProgressiveDecoder->ContinueDecode();
- }
- }
- delete pProgressiveDecoder;
- return pBitmap;
-}
-void XFA_RectWidthoutMargin(CFX_RectF& rt, const CXFA_Margin& mg, FX_BOOL bUI) {
- if (!mg) {
- return;
- }
- FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset;
- mg.GetLeftInset(fLeftInset);
- mg.GetTopInset(fTopInset);
- mg.GetRightInset(fRightInset);
- mg.GetBottomInset(fBottomInset);
- rt.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
-}
-CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem) {
- XFA_ELEMENT iType = pLayoutItem->GetFormNode()->GetClassID();
- if (XFA_IsCreateWidget(iType)) {
- return static_cast<CXFA_FFWidget*>(pLayoutItem);
- }
- return nullptr;
-}
-FX_BOOL XFA_IsCreateWidget(XFA_ELEMENT iType) {
- return iType == XFA_ELEMENT_Field || iType == XFA_ELEMENT_Draw ||
- iType == XFA_ELEMENT_Subform || iType == XFA_ELEMENT_ExclGroup;
-}
-static void XFA_BOX_GetPath_Arc(CXFA_Box box,
- CFX_RectF rtDraw,
- CFX_Path& fillPath,
- FX_DWORD dwFlags) {
- FX_FLOAT a, b;
- a = rtDraw.width / 2.0f;
- b = rtDraw.height / 2.0f;
- if (box.IsCircular() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) {
- a = b = std::min(a, b);
- }
- CFX_PointF center = rtDraw.Center();
- rtDraw.left = center.x - a;
- rtDraw.top = center.y - b;
- rtDraw.width = a + a;
- rtDraw.height = b + b;
- FX_FLOAT startAngle = 0, sweepAngle = 360;
- FX_BOOL bStart = box.GetStartAngle(startAngle);
- FX_BOOL bEnd = box.GetSweepAngle(sweepAngle);
- if (!bStart && !bEnd) {
- fillPath.AddEllipse(rtDraw);
- return;
- }
- startAngle = -startAngle * FX_PI / 180.0f;
- sweepAngle = -sweepAngle * FX_PI / 180.0f;
- fillPath.AddArc(rtDraw.left, rtDraw.top, rtDraw.width, rtDraw.height,
- startAngle, sweepAngle);
-}
-static void XFA_BOX_GetPath(CXFA_Box box,
- const CXFA_StrokeArray& strokes,
- CFX_RectF rtWidget,
- CFX_Path& path,
- int32_t nIndex,
- FX_BOOL bStart,
- FX_BOOL bCorner) {
- FXSYS_assert(nIndex >= 0 && nIndex < 8);
- FX_BOOL bInverted, bRound;
- FX_FLOAT fRadius1, fRadius2, sx, sy, vx, vy, nx, ny, offsetY, offsetX,
- offsetEX, offsetEY;
- CFX_PointF cpStart, cp, cp1, cp2;
- CFX_RectF rtRadius;
- int32_t n = (nIndex & 1) ? nIndex - 1 : nIndex;
- CXFA_Corner corner1 = (CXFA_Node*)strokes[n];
- CXFA_Corner corner2 = (CXFA_Node*)strokes[(n + 2) % 8];
- fRadius1 = bCorner ? corner1.GetRadius() : 0;
- fRadius2 = bCorner ? corner2.GetRadius() : 0;
- bInverted = corner1.IsInverted();
- offsetY = 0.0f;
- offsetX = 0.0f;
- bRound = corner1.GetJoinType() == XFA_ATTRIBUTEENUM_Round;
- FX_FLOAT halfAfter = 0.0f;
- FX_FLOAT halfBefore = 0.0f;
- CXFA_Stroke stroke = strokes[nIndex];
- if (stroke.IsCorner()) {
- CXFA_Stroke edgeBefore = strokes[(nIndex + 1 * 8 - 1) % 8];
- CXFA_Stroke edgeAfter = strokes[nIndex + 1];
- if (stroke.IsInverted()) {
- if (!stroke.SameStyles(edgeBefore)) {
- halfBefore = edgeBefore.GetThickness() / 2;
- }
- if (!stroke.SameStyles(edgeAfter)) {
- halfAfter = edgeAfter.GetThickness() / 2;
- }
- }
- } else {
- CXFA_Stroke edgeBefore = strokes[(nIndex + 8 - 2) % 8];
- CXFA_Stroke edgeAfter = strokes[(nIndex + 2) % 8];
- if (!bRound && !bInverted) {
- { halfBefore = edgeBefore.GetThickness() / 2; }
- { halfAfter = edgeAfter.GetThickness() / 2; }
- }
- }
- offsetEX = 0.0f;
- offsetEY = 0.0f;
- if (bRound) {
- sy = FX_PI / 2;
- }
- switch (nIndex) {
- case 0:
- case 1:
- cp1 = rtWidget.TopLeft();
- cp2 = rtWidget.TopRight();
- if (nIndex == 0) {
- cpStart.x = cp1.x - halfBefore;
- cpStart.y = cp1.y + fRadius1, offsetY = -halfAfter;
- } else {
- cpStart.x = cp1.x + fRadius1 - halfBefore, cpStart.y = cp1.y,
- offsetEX = halfAfter;
- }
- vx = 1, vy = 1;
- nx = -1, ny = 0;
- if (bRound) {
- sx = bInverted ? FX_PI / 2 : FX_PI;
- } else {
- sx = 1, sy = 0;
- }
- break;
- case 2:
- case 3:
- cp1 = rtWidget.TopRight();
- cp2 = rtWidget.BottomRight();
- if (nIndex == 2) {
- cpStart.x = cp1.x - fRadius1, cpStart.y = cp1.y - halfBefore,
- offsetX = halfAfter;
- } else {
- cpStart.x = cp1.x, cpStart.y = cp1.y + fRadius1 - halfBefore,
- offsetEY = halfAfter;
- }
- vx = -1, vy = 1;
- nx = 0, ny = -1;
- if (bRound) {
- sx = bInverted ? FX_PI : FX_PI * 3 / 2;
- } else {
- sx = 0, sy = 1;
- }
- break;
- case 4:
- case 5:
- cp1 = rtWidget.BottomRight();
- cp2 = rtWidget.BottomLeft();
- if (nIndex == 4) {
- cpStart.x = cp1.x + halfBefore, cpStart.y = cp1.y - fRadius1,
- offsetY = halfAfter;
- } else {
- cpStart.x = cp1.x - fRadius1 + halfBefore, cpStart.y = cp1.y,
- offsetEX = -halfAfter;
- }
- vx = -1, vy = -1;
- nx = 1, ny = 0;
- if (bRound) {
- sx = bInverted ? FX_PI * 3 / 2 : 0;
- } else {
- sx = -1, sy = 0;
- }
- break;
- case 6:
- case 7:
- cp1 = rtWidget.BottomLeft();
- cp2 = rtWidget.TopLeft();
- if (nIndex == 6) {
- cpStart.x = cp1.x + fRadius1, cpStart.y = cp1.y + halfBefore,
- offsetX = -halfAfter;
- } else {
- cpStart.x = cp1.x, cpStart.y = cp1.y - fRadius1 + halfBefore,
- offsetEY = -halfAfter;
- }
- vx = 1, vy = -1;
- nx = 0, ny = 1;
- if (bRound) {
- sx = bInverted ? 0 : FX_PI / 2;
- } else {
- sx = 0, sy = -1;
- }
- break;
- }
- if (bStart) {
- path.MoveTo(cpStart.x, cpStart.y);
- }
- if (nIndex & 1) {
- path.LineTo(cp2.x + fRadius2 * nx + offsetEX,
- cp2.y + fRadius2 * ny + offsetEY);
- return;
- }
- if (bRound) {
- if (fRadius1 < 0) {
- sx -= FX_PI;
- }
- if (bInverted) {
- sy *= -1;
- }
- rtRadius.Set(cp1.x + offsetX * 2, cp1.y + offsetY * 2,
- fRadius1 * 2 * vx - offsetX * 2,
- fRadius1 * 2 * vy - offsetY * 2);
- rtRadius.Normalize();
- if (bInverted) {
- rtRadius.Offset(-fRadius1 * vx, -fRadius1 * vy);
- }
- path.ArcTo(rtRadius.left, rtRadius.top, rtRadius.width, rtRadius.height, sx,
- sy);
- } else {
- if (bInverted) {
- cp.x = cp1.x + fRadius1 * vx, cp.y = cp1.y + fRadius1 * vy;
- } else {
- cp = cp1;
- }
- path.LineTo(cp.x, cp.y);
- path.LineTo(cp1.x + fRadius1 * sx + offsetX,
- cp1.y + fRadius1 * sy + offsetY);
- }
-}
-static void XFA_BOX_GetFillPath(CXFA_Box box,
- const CXFA_StrokeArray& strokes,
- CFX_RectF rtWidget,
- CFX_Path& fillPath,
- FX_WORD dwFlags) {
- if (box.IsArc() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) {
- CXFA_Edge edge = box.GetEdge(0);
- FX_FLOAT fThickness = edge.GetThickness();
- if (fThickness < 0) {
- fThickness = 0;
- }
- FX_FLOAT fHalf = fThickness / 2;
- int32_t iHand = box.GetHand();
- if (iHand == XFA_ATTRIBUTEENUM_Left) {
- rtWidget.Inflate(fHalf, fHalf);
- } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
- rtWidget.Deflate(fHalf, fHalf);
- }
- XFA_BOX_GetPath_Arc(box, rtWidget, fillPath, dwFlags);
- return;
- }
- FX_BOOL bSameStyles = TRUE;
- int32_t i;
- CXFA_Stroke stroke1 = strokes[0];
- for (i = 1; i < 8; i++) {
- CXFA_Stroke stroke2 = strokes[i];
- if (!stroke1.SameStyles(stroke2)) {
- bSameStyles = FALSE;
- break;
- }
- stroke1 = stroke2;
- }
- if (bSameStyles) {
- stroke1 = strokes[0];
- for (i = 2; i < 8; i += 2) {
- CXFA_Stroke stroke2 = strokes[i];
- if (!stroke1.SameStyles(stroke2, XFA_STROKE_SAMESTYLE_NoPresence |
- XFA_STROKE_SAMESTYLE_Corner)) {
- bSameStyles = FALSE;
- break;
- }
- stroke1 = stroke2;
- }
- if (bSameStyles) {
- stroke1 = strokes[0];
- if (stroke1.IsInverted()) {
- bSameStyles = FALSE;
- }
- if (stroke1.GetJoinType() != XFA_ATTRIBUTEENUM_Square) {
- bSameStyles = FALSE;
- }
- }
- }
- if (bSameStyles) {
- fillPath.AddRectangle(rtWidget.left, rtWidget.top, rtWidget.width,
- rtWidget.height);
- return;
- }
- FX_BOOL bInverted, bRound;
- FX_FLOAT fRadius1, fRadius2, sx, sy, vx, vy, nx, ny;
- CFX_PointF cp, cp1, cp2;
- CFX_RectF rtRadius;
- for (int32_t i = 0; i < 8; i += 2) {
- CXFA_Corner corner1 = (CXFA_Node*)strokes[i];
- CXFA_Corner corner2 = (CXFA_Node*)strokes[(i + 2) % 8];
- fRadius1 = corner1.GetRadius();
- fRadius2 = corner2.GetRadius();
- bInverted = corner1.IsInverted();
- bRound = corner1.GetJoinType() == XFA_ATTRIBUTEENUM_Round;
- if (bRound) {
- sy = FX_PI / 2;
- }
- switch (i) {
- case 0:
- cp1 = rtWidget.TopLeft();
- cp2 = rtWidget.TopRight();
- vx = 1, vy = 1;
- nx = -1, ny = 0;
- if (bRound) {
- sx = bInverted ? FX_PI / 2 : FX_PI;
- } else {
- sx = 1, sy = 0;
- }
- break;
- case 2:
- cp1 = rtWidget.TopRight();
- cp2 = rtWidget.BottomRight();
- vx = -1, vy = 1;
- nx = 0, ny = -1;
- if (bRound) {
- sx = bInverted ? FX_PI : FX_PI * 3 / 2;
- } else {
- sx = 0, sy = 1;
- }
- break;
- case 4:
- cp1 = rtWidget.BottomRight();
- cp2 = rtWidget.BottomLeft();
- vx = -1, vy = -1;
- nx = 1, ny = 0;
- if (bRound) {
- sx = bInverted ? FX_PI * 3 / 2 : 0;
- } else {
- sx = -1, sy = 0;
- }
- break;
- case 6:
- cp1 = rtWidget.BottomLeft();
- cp2 = rtWidget.TopLeft();
- vx = 1, vy = -1;
- nx = 0, ny = 1;
- if (bRound) {
- sx = bInverted ? 0 : FX_PI / 2;
- } else {
- sx = 0, sy = -1;
- }
- break;
- }
- if (i == 0) {
- fillPath.MoveTo(cp1.x, cp1.y + fRadius1);
- }
- if (bRound) {
- if (fRadius1 < 0) {
- sx -= FX_PI;
- }
- if (bInverted) {
- sy *= -1;
- }
- rtRadius.Set(cp1.x, cp1.y, fRadius1 * 2 * vx, fRadius1 * 2 * vy);
- rtRadius.Normalize();
- if (bInverted) {
- rtRadius.Offset(-fRadius1 * vx, -fRadius1 * vy);
- }
- fillPath.ArcTo(rtRadius.left, rtRadius.top, rtRadius.width,
- rtRadius.height, sx, sy);
- } else {
- if (bInverted) {
- cp.x = cp1.x + fRadius1 * vx, cp.y = cp1.y + fRadius1 * vy;
- } else {
- cp = cp1;
- }
- fillPath.LineTo(cp.x, cp.y);
- fillPath.LineTo(cp1.x + fRadius1 * sx, cp1.y + fRadius1 * sy);
- }
- fillPath.LineTo(cp2.x + fRadius2 * nx, cp2.y + fRadius2 * ny);
- }
-}
-static void XFA_BOX_Fill_Radial(CXFA_Box box,
- CFX_Graphics* pGS,
- CFX_Path& fillPath,
- CFX_RectF rtFill,
- CFX_Matrix* pMatrix) {
- CXFA_Fill fill = box.GetFill();
- FX_ARGB crStart, crEnd;
- crStart = fill.GetColor();
- int32_t iType = fill.GetRadial(crEnd);
- CFX_Shading shading;
- if (iType != XFA_ATTRIBUTEENUM_ToEdge) {
- FX_ARGB temp = crEnd;
- crEnd = crStart;
- crStart = temp;
- }
- shading.CreateRadial(rtFill.Center(), rtFill.Center(), 0,
- FXSYS_sqrt(rtFill.Width() * rtFill.Width() +
- rtFill.Height() * rtFill.Height()) /
- 2,
- TRUE, TRUE, crStart, crEnd);
- CFX_Color cr(&shading);
- pGS->SetFillColor(&cr);
- pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
-}
-static void XFA_BOX_Fill_Pattern(CXFA_Box box,
- CFX_Graphics* pGS,
- CFX_Path& fillPath,
- CFX_RectF rtFill,
- CFX_Matrix* pMatrix) {
- CXFA_Fill fill = box.GetFill();
- FX_ARGB crStart, crEnd;
- crStart = fill.GetColor();
- int32_t iType = fill.GetPattern(crEnd);
- int32_t iHatch = FX_HATCHSTYLE_Cross;
- switch (iType) {
- case XFA_ATTRIBUTEENUM_CrossDiagonal:
- iHatch = FX_HATCHSTYLE_DiagonalCross;
- break;
- case XFA_ATTRIBUTEENUM_DiagonalLeft:
- iHatch = FX_HATCHSTYLE_ForwardDiagonal;
- break;
- case XFA_ATTRIBUTEENUM_DiagonalRight:
- iHatch = FX_HATCHSTYLE_BackwardDiagonal;
- break;
- case XFA_ATTRIBUTEENUM_Horizontal:
- iHatch = FX_HATCHSTYLE_Horizontal;
- break;
- case XFA_ATTRIBUTEENUM_Vertical:
- iHatch = FX_HATCHSTYLE_Vertical;
- break;
- default:
- break;
- }
- CFX_Pattern pattern;
- pattern.Create(iHatch, crEnd, crStart);
- CFX_Color cr(&pattern);
- pGS->SetFillColor(&cr);
- pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
-}
-static void XFA_BOX_Fill_Linear(CXFA_Box box,
- CFX_Graphics* pGS,
- CFX_Path& fillPath,
- CFX_RectF rtFill,
- CFX_Matrix* pMatrix) {
- CXFA_Fill fill = box.GetFill();
- FX_ARGB crStart, crEnd;
- crStart = fill.GetColor();
- int32_t iType = fill.GetLinear(crEnd);
- CFX_PointF ptStart, ptEnd;
- switch (iType) {
- case XFA_ATTRIBUTEENUM_ToRight:
- ptStart.Set(rtFill.left, rtFill.top);
- ptEnd.Set(rtFill.right(), rtFill.top);
- break;
- case XFA_ATTRIBUTEENUM_ToBottom:
- ptStart.Set(rtFill.left, rtFill.top);
- ptEnd.Set(rtFill.left, rtFill.bottom());
- break;
- case XFA_ATTRIBUTEENUM_ToLeft:
- ptStart.Set(rtFill.right(), rtFill.top);
- ptEnd.Set(rtFill.left, rtFill.top);
- break;
- case XFA_ATTRIBUTEENUM_ToTop:
- ptStart.Set(rtFill.left, rtFill.bottom());
- ptEnd.Set(rtFill.left, rtFill.top);
- break;
- default:
- break;
- }
- CFX_Shading shading;
- shading.CreateAxial(ptStart, ptEnd, FALSE, FALSE, crStart, crEnd);
- CFX_Color cr(&shading);
- pGS->SetFillColor(&cr);
- pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
-}
-static void XFA_BOX_Fill(CXFA_Box box,
- const CXFA_StrokeArray& strokes,
- CFX_Graphics* pGS,
- const CFX_RectF& rtWidget,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags) {
- CXFA_Fill fill = box.GetFill();
- if (!fill.IsExistInXML() || fill.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
- return;
- }
- pGS->SaveGraphState();
- CFX_Path fillPath;
- fillPath.Create();
- XFA_BOX_GetFillPath(box, strokes, rtWidget, fillPath,
- (dwFlags & XFA_DRAWBOX_ForceRound) != 0);
- fillPath.Close();
- int32_t eType = fill.GetFillType();
- switch (eType) {
- case XFA_ELEMENT_Radial:
- XFA_BOX_Fill_Radial(box, pGS, fillPath, rtWidget, pMatrix);
- break;
- case XFA_ELEMENT_Pattern:
- XFA_BOX_Fill_Pattern(box, pGS, fillPath, rtWidget, pMatrix);
- break;
- case XFA_ELEMENT_Linear:
- XFA_BOX_Fill_Linear(box, pGS, fillPath, rtWidget, pMatrix);
- break;
- default: {
- FX_ARGB cr;
- if (eType == XFA_ELEMENT_Stipple) {
- int32_t iRate = fill.GetStipple(cr);
- if (iRate == 0) {
- iRate = 100;
- }
- int32_t a = 0;
- FX_COLORREF rgb;
- ArgbDecode(cr, a, rgb);
- cr = ArgbEncode(iRate * a / 100, rgb);
- } else {
- cr = fill.GetColor();
- }
- CFX_Color fillColor(cr);
- pGS->SetFillColor(&fillColor);
- pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
- } break;
- }
- pGS->RestoreGraphState();
-}
-static void XFA_BOX_StrokePath(CXFA_Stroke stroke,
- CFX_Path* pPath,
- CFX_Graphics* pGS,
- CFX_Matrix* pMatrix) {
- if (!stroke.IsExistInXML() || !stroke.IsVisible()) {
- return;
- }
- FX_FLOAT fThickness = stroke.GetThickness();
- if (fThickness < 0.001f) {
- return;
- }
- pGS->SaveGraphState();
- if (stroke.IsCorner() && fThickness > 2 * stroke.GetRadius()) {
- fThickness = 2 * stroke.GetRadius();
- }
- pGS->SetLineWidth(fThickness, TRUE);
- pGS->SetLineCap(CFX_GraphStateData::LineCapButt);
- XFA_StrokeTypeSetLineDash(pGS, stroke.GetStrokeType(),
- XFA_ATTRIBUTEENUM_Butt);
- CFX_Color fxColor(stroke.GetColor());
- pGS->SetStrokeColor(&fxColor);
- pGS->StrokePath(pPath, pMatrix);
- pGS->RestoreGraphState();
-}
-static void XFA_BOX_StrokeArc(CXFA_Box box,
- CFX_Graphics* pGS,
- CFX_RectF rtWidget,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags) {
- CXFA_Edge edge = box.GetEdge(0);
- if (!edge.IsExistInXML() || !edge.IsVisible()) {
- return;
- }
- FX_BOOL bVisible = FALSE;
- FX_FLOAT fThickness = 0;
- int32_t i3DType = box.Get3DStyle(bVisible, fThickness);
- if (i3DType) {
- if (bVisible && fThickness >= 0.001f) {
- dwFlags |= XFA_DRAWBOX_Lowered3D;
- }
- }
- FX_FLOAT fHalf = edge.GetThickness() / 2;
- if (fHalf < 0) {
- fHalf = 0;
- }
- int32_t iHand = box.GetHand();
- if (iHand == XFA_ATTRIBUTEENUM_Left) {
- rtWidget.Inflate(fHalf, fHalf);
- } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
- rtWidget.Deflate(fHalf, fHalf);
- }
- if ((dwFlags & XFA_DRAWBOX_ForceRound) == 0 ||
- (dwFlags & XFA_DRAWBOX_Lowered3D) == 0) {
- if (fHalf < 0.001f) {
- return;
- }
- CFX_Path arcPath;
- arcPath.Create();
- XFA_BOX_GetPath_Arc(box, rtWidget, arcPath, dwFlags);
- XFA_BOX_StrokePath(edge, &arcPath, pGS, pMatrix);
- return;
- }
- pGS->SaveGraphState();
- pGS->SetLineWidth(fHalf);
- FX_FLOAT a, b;
- a = rtWidget.width / 2.0f;
- b = rtWidget.height / 2.0f;
- if (dwFlags & XFA_DRAWBOX_ForceRound) {
- a = b = std::min(a, b);
- }
- CFX_PointF center = rtWidget.Center();
- rtWidget.left = center.x - a;
- rtWidget.top = center.y - b;
- rtWidget.width = a + a;
- rtWidget.height = b + b;
- FX_FLOAT startAngle = 0, sweepAngle = 360;
- startAngle = startAngle * FX_PI / 180.0f;
- sweepAngle = -sweepAngle * FX_PI / 180.0f;
- CFX_Path arcPath;
- arcPath.Create();
- arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
- 3.0f * FX_PI / 4.0f, FX_PI);
- CFX_Color cr(0xFF808080);
- pGS->SetStrokeColor(&cr);
- pGS->StrokePath(&arcPath, pMatrix);
- arcPath.Clear();
- arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
- -1.0f * FX_PI / 4.0f, FX_PI);
- cr.Set(0xFFFFFFFF);
- pGS->SetStrokeColor(&cr);
- pGS->StrokePath(&arcPath, pMatrix);
- rtWidget.Deflate(fHalf, fHalf);
- arcPath.Clear();
- arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
- 3.0f * FX_PI / 4.0f, FX_PI);
- cr.Set(0xFF404040);
- pGS->SetStrokeColor(&cr);
- pGS->StrokePath(&arcPath, pMatrix);
- arcPath.Clear();
- arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
- -1.0f * FX_PI / 4.0f, FX_PI);
- cr.Set(0xFFC0C0C0);
- pGS->SetStrokeColor(&cr);
- pGS->StrokePath(&arcPath, pMatrix);
- pGS->RestoreGraphState();
-}
-static void XFA_Draw3DRect(CFX_Graphics* pGraphic,
- const CFX_RectF& rt,
- FX_FLOAT fLineWidth,
- CFX_Matrix* pMatrix,
- FX_ARGB argbTopLeft,
- FX_ARGB argbBottomRight) {
- CFX_Color crLT(argbTopLeft);
- pGraphic->SetFillColor(&crLT);
- FX_FLOAT fBottom = rt.bottom();
- FX_FLOAT fRight = rt.right();
- CFX_Path pathLT;
- pathLT.Create();
- pathLT.MoveTo(rt.left, fBottom);
- pathLT.LineTo(rt.left, rt.top);
- pathLT.LineTo(fRight, rt.top);
- pathLT.LineTo(fRight - fLineWidth, rt.top + fLineWidth);
- pathLT.LineTo(rt.left + fLineWidth, rt.top + fLineWidth);
- pathLT.LineTo(rt.left + fLineWidth, fBottom - fLineWidth);
- pathLT.LineTo(rt.left, fBottom);
- pGraphic->FillPath(&pathLT, FXFILL_WINDING, pMatrix);
- CFX_Color crRB(argbBottomRight);
- pGraphic->SetFillColor(&crRB);
- CFX_Path pathRB;
- pathRB.Create();
- pathRB.MoveTo(fRight, rt.top);
- pathRB.LineTo(fRight, fBottom);
- pathRB.LineTo(rt.left, fBottom);
- pathRB.LineTo(rt.left + fLineWidth, fBottom - fLineWidth);
- pathRB.LineTo(fRight - fLineWidth, fBottom - fLineWidth);
- pathRB.LineTo(fRight - fLineWidth, rt.top + fLineWidth);
- pathRB.LineTo(fRight, rt.top);
- pGraphic->FillPath(&pathRB, FXFILL_WINDING, pMatrix);
-}
-static void XFA_BOX_Stroke_3DRect_Lowered(CFX_Graphics* pGS,
- CFX_RectF rt,
- FX_FLOAT fThickness,
- CFX_Matrix* pMatrix) {
- FX_FLOAT fHalfWidth = fThickness / 2.0f;
- CFX_RectF rtInner(rt);
- rtInner.Deflate(fHalfWidth, fHalfWidth);
- CFX_Color cr(0xFF000000);
- pGS->SetFillColor(&cr);
- CFX_Path path;
- path.Create();
- path.AddRectangle(rt.left, rt.top, rt.width, rt.height);
- path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
- pGS->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
- XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFF808080, 0xFFC0C0C0);
-}
-static void XFA_BOX_Stroke_3DRect_Raised(CFX_Graphics* pGS,
- CFX_RectF rt,
- FX_FLOAT fThickness,
- CFX_Matrix* pMatrix) {
- FX_FLOAT fHalfWidth = fThickness / 2.0f;
- CFX_RectF rtInner(rt);
- rtInner.Deflate(fHalfWidth, fHalfWidth);
- CFX_Color cr(0xFF000000);
- pGS->SetFillColor(&cr);
- CFX_Path path;
- path.Create();
- path.AddRectangle(rt.left, rt.top, rt.width, rt.height);
- path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
- pGS->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
- XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFFFFFFFF, 0xFF808080);
-}
-static void XFA_BOX_Stroke_3DRect_Etched(CFX_Graphics* pGS,
- CFX_RectF rt,
- FX_FLOAT fThickness,
- CFX_Matrix* pMatrix) {
- FX_FLOAT fHalfWidth = fThickness / 2.0f;
- XFA_Draw3DRect(pGS, rt, fThickness, pMatrix, 0xFF808080, 0xFFFFFFFF);
- CFX_RectF rtInner(rt);
- rtInner.Deflate(fHalfWidth, fHalfWidth);
- XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFFFFFFFF, 0xFF808080);
-}
-static void XFA_BOX_Stroke_3DRect_Embossed(CFX_Graphics* pGS,
- CFX_RectF rt,
- FX_FLOAT fThickness,
- CFX_Matrix* pMatrix) {
- FX_FLOAT fHalfWidth = fThickness / 2.0f;
- XFA_Draw3DRect(pGS, rt, fThickness, pMatrix, 0xFF808080, 0xFF000000);
- CFX_RectF rtInner(rt);
- rtInner.Deflate(fHalfWidth, fHalfWidth);
- XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFF000000, 0xFF808080);
-}
-static void XFA_BOX_Stroke_Rect(CXFA_Box box,
- const CXFA_StrokeArray& strokes,
- CFX_Graphics* pGS,
- CFX_RectF rtWidget,
- CFX_Matrix* pMatrix) {
- FX_BOOL bVisible = FALSE;
- FX_FLOAT fThickness = 0;
- int32_t i3DType = box.Get3DStyle(bVisible, fThickness);
- if (i3DType) {
- if (!bVisible || fThickness < 0.001f) {
- return;
- }
- switch (i3DType) {
- case XFA_ATTRIBUTEENUM_Lowered:
- XFA_BOX_Stroke_3DRect_Lowered(pGS, rtWidget, fThickness, pMatrix);
- break;
- case XFA_ATTRIBUTEENUM_Raised:
- XFA_BOX_Stroke_3DRect_Raised(pGS, rtWidget, fThickness, pMatrix);
- break;
- case XFA_ATTRIBUTEENUM_Etched:
- XFA_BOX_Stroke_3DRect_Etched(pGS, rtWidget, fThickness, pMatrix);
- break;
- case XFA_ATTRIBUTEENUM_Embossed:
- XFA_BOX_Stroke_3DRect_Embossed(pGS, rtWidget, fThickness, pMatrix);
- break;
- }
- return;
- }
- FX_BOOL bClose = FALSE;
- FX_BOOL bSameStyles = TRUE;
- int32_t i;
- CXFA_Stroke stroke1 = strokes[0];
- for (i = 1; i < 8; i++) {
- CXFA_Stroke stroke2 = strokes[i];
- if (!stroke1.SameStyles(stroke2)) {
- bSameStyles = FALSE;
- break;
- }
- stroke1 = stroke2;
- }
- if (bSameStyles) {
- stroke1 = strokes[0];
- bClose = TRUE;
- for (i = 2; i < 8; i += 2) {
- CXFA_Stroke stroke2 = strokes[i];
- if (!stroke1.SameStyles(stroke2, XFA_STROKE_SAMESTYLE_NoPresence |
- XFA_STROKE_SAMESTYLE_Corner)) {
- bSameStyles = FALSE;
- break;
- }
- stroke1 = stroke2;
- }
- if (bSameStyles) {
- stroke1 = strokes[0];
- if (stroke1.IsInverted()) {
- bSameStyles = FALSE;
- }
- if (stroke1.GetJoinType() != XFA_ATTRIBUTEENUM_Square) {
- bSameStyles = FALSE;
- }
- }
- }
- FX_BOOL bStart = TRUE;
- CFX_Path path;
- path.Create();
- for (i = 0; i < 8; i++) {
- CXFA_Stroke stroke1 = strokes[i];
- if ((i % 1) == 0 && stroke1.GetRadius() < 0) {
- FX_BOOL bEmpty = path.IsEmpty();
- if (!bEmpty) {
- XFA_BOX_StrokePath(stroke1, &path, pGS, pMatrix);
- path.Clear();
- }
- bStart = TRUE;
- continue;
- }
- XFA_BOX_GetPath(box, strokes, rtWidget, path, i, bStart, !bSameStyles);
- CXFA_Stroke stroke2 = strokes[(i + 1) % 8];
- bStart = !stroke1.SameStyles(stroke2);
- if (bStart) {
- XFA_BOX_StrokePath(stroke1, &path, pGS, pMatrix);
- path.Clear();
- }
- }
- FX_BOOL bEmpty = path.IsEmpty();
- if (!bEmpty) {
- if (bClose) {
- path.Close();
- }
- XFA_BOX_StrokePath(strokes[7], &path, pGS, pMatrix);
- }
-}
-static void XFA_BOX_Stroke(CXFA_Box box,
- const CXFA_StrokeArray& strokes,
- CFX_Graphics* pGS,
- CFX_RectF rtWidget,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags) {
- if (box.IsArc() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) {
- XFA_BOX_StrokeArc(box, pGS, rtWidget, pMatrix, dwFlags);
- return;
- }
- FX_BOOL bVisible = FALSE;
- for (int32_t j = 0; j < 4; j++) {
- bVisible |= strokes[j * 2 + 1].IsVisible();
- if (bVisible) {
- break;
- }
- }
- if (!bVisible) {
- return;
- }
- for (int32_t i = 1; i < 8; i += 2) {
- CXFA_Edge edge = (CXFA_Node*)strokes[i];
- FX_FLOAT fThickness = edge.GetThickness();
- if (fThickness < 0) {
- fThickness = 0;
- }
- FX_FLOAT fHalf = fThickness / 2;
- int32_t iHand = box.GetHand();
- switch (i) {
- case 1:
- if (iHand == XFA_ATTRIBUTEENUM_Left) {
- rtWidget.top -= fHalf;
- rtWidget.height += fHalf;
- } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
- rtWidget.top += fHalf;
- rtWidget.height -= fHalf;
- }
- break;
- case 3:
- if (iHand == XFA_ATTRIBUTEENUM_Left) {
- rtWidget.width += fHalf;
- } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
- rtWidget.width -= fHalf;
- }
- break;
- case 5:
- if (iHand == XFA_ATTRIBUTEENUM_Left) {
- rtWidget.height += fHalf;
- } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
- rtWidget.height -= fHalf;
- }
- break;
- case 7:
- if (iHand == XFA_ATTRIBUTEENUM_Left) {
- rtWidget.left -= fHalf;
- rtWidget.width += fHalf;
- } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
- rtWidget.left += fHalf;
- rtWidget.width -= fHalf;
- }
- break;
- }
- }
- XFA_BOX_Stroke_Rect(box, strokes, pGS, rtWidget, pMatrix);
-}
-void XFA_DrawBox(CXFA_Box box,
- CFX_Graphics* pGS,
- const CFX_RectF& rtWidget,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags) {
- if (!box || box.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
- return;
- }
- int32_t iType = box.GetClassID();
- if (iType != XFA_ELEMENT_Arc && iType != XFA_ELEMENT_Border &&
- iType != XFA_ELEMENT_Rectangle) {
- return;
- }
- CXFA_StrokeArray strokes;
- if (!(dwFlags & XFA_DRAWBOX_ForceRound) && iType != XFA_ELEMENT_Arc) {
- box.GetStrokes(strokes);
- }
- XFA_BOX_Fill(box, strokes, pGS, rtWidget, pMatrix, dwFlags);
- XFA_BOX_Stroke(box, strokes, pGS, rtWidget, pMatrix, dwFlags);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffpageview.h"
+#include "xfa_textlayout.h"
+CXFA_FFWidget::CXFA_FFWidget(CXFA_FFPageView* pPageView,
+ CXFA_WidgetAcc* pDataAcc)
+ : CXFA_ContentLayoutItem(pDataAcc->GetNode()),
+ m_pPageView(pPageView),
+ m_pDataAcc(pDataAcc) {
+ m_rtWidget.Set(0, 0, 0, 0);
+}
+CXFA_FFWidget::~CXFA_FFWidget() {}
+IXFA_PageView* CXFA_FFWidget::GetPageView() {
+ return m_pPageView;
+}
+void CXFA_FFWidget::SetPageView(IXFA_PageView* pPageView) {
+ m_pPageView = static_cast<CXFA_FFPageView*>(pPageView);
+}
+void CXFA_FFWidget::GetWidgetRect(CFX_RectF& rtWidget) {
+ if ((m_dwStatus & XFA_WIDGETSTATUS_RectCached) == 0) {
+ m_dwStatus |= XFA_WIDGETSTATUS_RectCached;
+ GetRect(m_rtWidget);
+ }
+ rtWidget = m_rtWidget;
+}
+CFX_RectF CXFA_FFWidget::ReCacheWidgetRect() {
+ m_dwStatus |= XFA_WIDGETSTATUS_RectCached;
+ GetRect(m_rtWidget);
+ return m_rtWidget;
+}
+void CXFA_FFWidget::GetRectWithoutRotate(CFX_RectF& rtWidget) {
+ GetWidgetRect(rtWidget);
+ FX_FLOAT fValue = 0;
+ switch (m_pDataAcc->GetRotate()) {
+ case 90:
+ rtWidget.top = rtWidget.bottom();
+ fValue = rtWidget.width;
+ rtWidget.width = rtWidget.height;
+ rtWidget.height = fValue;
+ break;
+ case 180:
+ rtWidget.left = rtWidget.right();
+ rtWidget.top = rtWidget.bottom();
+ break;
+ case 270:
+ rtWidget.left = rtWidget.right();
+ fValue = rtWidget.width;
+ rtWidget.width = rtWidget.height;
+ rtWidget.height = fValue;
+ break;
+ }
+}
+FX_DWORD CXFA_FFWidget::GetStatus() {
+ return m_dwStatus;
+}
+void CXFA_FFWidget::ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved) {
+ m_dwStatus = (m_dwStatus & ~dwRemoved) | dwAdded;
+}
+FX_BOOL CXFA_FFWidget::GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus) {
+ if (bDrawFocus) {
+ return FALSE;
+ }
+#ifndef _XFA_EMB
+ if (m_pPageView) {
+ m_pPageView->GetPageViewRect(rtBox);
+ }
+ return TRUE;
+#endif
+ GetWidgetRect(rtBox);
+ return TRUE;
+}
+CXFA_WidgetAcc* CXFA_FFWidget::GetDataAcc() {
+ return m_pDataAcc;
+}
+FX_BOOL CXFA_FFWidget::GetToolTip(CFX_WideString& wsToolTip) {
+ if (CXFA_Assist assist = m_pDataAcc->GetAssist()) {
+ if (CXFA_ToolTip toolTip = assist.GetToolTip()) {
+ return toolTip.GetTip(wsToolTip);
+ }
+ }
+ return GetCaptionText(wsToolTip);
+}
+void CXFA_FFWidget::RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwStatus,
+ int32_t iRotate) {
+ if (!IsMatchVisibleStatus(dwStatus)) {
+ return;
+ }
+ CXFA_Border border = m_pDataAcc->GetBorder();
+ if (border) {
+ CFX_RectF rtBorder;
+ GetRectWithoutRotate(rtBorder);
+ CXFA_Margin margin = border.GetMargin();
+ if (margin.IsExistInXML()) {
+ XFA_RectWidthoutMargin(rtBorder, margin);
+ }
+ rtBorder.Normalize();
+ DrawBorder(pGS, border, rtBorder, pMatrix);
+ }
+}
+FX_BOOL CXFA_FFWidget::IsLoaded() {
+ return m_pPageView != NULL;
+}
+FX_BOOL CXFA_FFWidget::LoadWidget() {
+ PerformLayout();
+ return TRUE;
+}
+void CXFA_FFWidget::UnloadWidget() {}
+FX_BOOL CXFA_FFWidget::PerformLayout() {
+ ReCacheWidgetRect();
+ return TRUE;
+}
+FX_BOOL CXFA_FFWidget::UpdateFWLData() {
+ return FALSE;
+}
+void CXFA_FFWidget::UpdateWidgetProperty() {}
+void CXFA_FFWidget::DrawBorder(CFX_Graphics* pGS,
+ CXFA_Box box,
+ const CFX_RectF& rtBorder,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags) {
+ XFA_DrawBox(box, pGS, rtBorder, pMatrix, dwFlags);
+}
+void CXFA_FFWidget::InvalidateWidget(const CFX_RectF* pRect) {
+ if (!pRect) {
+ CFX_RectF rtWidget;
+ GetBBox(rtWidget, XFA_WIDGETSTATUS_Focused);
+ rtWidget.Inflate(2, 2);
+ GetDoc()->GetDocProvider()->InvalidateRect(m_pPageView, rtWidget,
+ XFA_INVALIDATE_CurrentPage);
+ } else {
+ GetDoc()->GetDocProvider()->InvalidateRect(m_pPageView, *pRect,
+ XFA_INVALIDATE_CurrentPage);
+ }
+}
+void CXFA_FFWidget::AddInvalidateRect(const CFX_RectF* pRect) {
+ CFX_RectF rtWidget;
+ if (pRect) {
+ rtWidget = *pRect;
+ } else {
+ GetBBox(rtWidget, XFA_WIDGETSTATUS_Focused);
+ rtWidget.Inflate(2, 2);
+ }
+ m_pDocView->AddInvalidateRect(m_pPageView, rtWidget);
+}
+FX_BOOL CXFA_FFWidget::GetCaptionText(CFX_WideString& wsCap) {
+ CXFA_TextLayout* pCapTextlayout = m_pDataAcc->GetCaptionTextLayout();
+ if (!pCapTextlayout) {
+ return FALSE;
+ }
+ pCapTextlayout->GetText(wsCap);
+ return TRUE;
+}
+FX_BOOL CXFA_FFWidget::IsFocused() {
+ return m_dwStatus & XFA_WIDGETSTATUS_Focused;
+}
+FX_BOOL CXFA_FFWidget::OnMouseEnter() {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnMouseExit() {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnLButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnLButtonDblClk(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnMouseWheel(FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnRButtonDown(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnRButtonDblClk(FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return FALSE;
+}
+
+FX_BOOL CXFA_FFWidget::OnSetFocus(CXFA_FFWidget* pOldWidget) {
+ CXFA_FFWidget* pParent = GetParent();
+ if (pParent != NULL && !pParent->IsAncestorOf(pOldWidget)) {
+ pParent->OnSetFocus(pOldWidget);
+ }
+ m_dwStatus |= XFA_WIDGETSTATUS_Focused;
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Enter;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Enter, &eParam);
+ return TRUE;
+}
+FX_BOOL CXFA_FFWidget::OnKillFocus(CXFA_FFWidget* pNewWidget) {
+ m_dwStatus &= ~XFA_WIDGETSTATUS_Focused;
+ EventKillFocus();
+ if (pNewWidget != NULL) {
+ CXFA_FFWidget* pParent = GetParent();
+ if (pParent != NULL && !pParent->IsAncestorOf(pNewWidget)) {
+ pParent->OnKillFocus(pNewWidget);
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CXFA_FFWidget::OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnChar(FX_DWORD dwChar, FX_DWORD dwFlags) {
+ return FALSE;
+}
+FX_DWORD CXFA_FFWidget::OnHitTest(FX_FLOAT fx, FX_FLOAT fy) {
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) {
+ return FALSE;
+}
+void CXFA_FFWidget::Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy) {
+ CFX_Matrix mt;
+ GetRotateMatrix(mt);
+ if (mt.IsIdentity()) {
+ return;
+ }
+ CFX_Matrix mtReverse;
+ mtReverse.SetReverse(mt);
+ mtReverse.TransformPoint(fx, fy);
+}
+static void XFA_GetMatrix(CFX_Matrix& m,
+ int32_t iRotate,
+ int32_t at,
+ const CFX_RectF& rt) {
+ if (!iRotate) {
+ return;
+ }
+ FX_FLOAT fAnchorX, fAnchorY;
+ switch (at) {
+ case XFA_ATTRIBUTEENUM_TopLeft:
+ fAnchorX = rt.left, fAnchorY = rt.top;
+ break;
+ case XFA_ATTRIBUTEENUM_TopCenter:
+ fAnchorX = (rt.left + rt.right()) / 2, fAnchorY = rt.top;
+ break;
+ case XFA_ATTRIBUTEENUM_TopRight:
+ fAnchorX = rt.right(), fAnchorY = rt.top;
+ break;
+ case XFA_ATTRIBUTEENUM_MiddleLeft:
+ fAnchorX = rt.left, fAnchorY = (rt.top + rt.bottom()) / 2;
+ break;
+ case XFA_ATTRIBUTEENUM_MiddleCenter:
+ fAnchorX = (rt.left + rt.right()) / 2,
+ fAnchorY = (rt.top + rt.bottom()) / 2;
+ break;
+ case XFA_ATTRIBUTEENUM_MiddleRight:
+ fAnchorX = rt.right(), fAnchorY = (rt.top + rt.bottom()) / 2;
+ break;
+ case XFA_ATTRIBUTEENUM_BottomLeft:
+ fAnchorX = rt.left, fAnchorY = rt.bottom();
+ break;
+ case XFA_ATTRIBUTEENUM_BottomCenter:
+ fAnchorX = (rt.left + rt.right()) / 2, fAnchorY = rt.bottom();
+ break;
+ case XFA_ATTRIBUTEENUM_BottomRight:
+ fAnchorX = rt.right(), fAnchorY = rt.bottom();
+ break;
+ }
+ switch (iRotate) {
+ case 90:
+ m.a = 0, m.b = -1, m.c = 1, m.d = 0, m.e = fAnchorX - fAnchorY,
+ m.f = fAnchorX + fAnchorY;
+ break;
+ case 180:
+ m.a = -1, m.b = 0, m.c = 0, m.d = -1, m.e = fAnchorX * 2,
+ m.f = fAnchorY * 2;
+ break;
+ case 270:
+ m.a = 0, m.b = 1, m.c = -1, m.d = 0, m.e = fAnchorX + fAnchorY,
+ m.f = fAnchorY - fAnchorX;
+ break;
+ }
+}
+void CXFA_FFWidget::GetRotateMatrix(CFX_Matrix& mt) {
+ mt.Set(1, 0, 0, 1, 0, 0);
+ int32_t iRotate = m_pDataAcc->GetRotate();
+ if (!iRotate) {
+ return;
+ }
+ CFX_RectF rcWidget;
+ GetRectWithoutRotate(rcWidget);
+ XFA_ATTRIBUTEENUM at = XFA_ATTRIBUTEENUM_TopLeft;
+ XFA_GetMatrix(mt, iRotate, at, rcWidget);
+}
+FX_BOOL CXFA_FFWidget::IsLayoutRectEmpty() {
+ CFX_RectF rtLayout;
+ GetRectWithoutRotate(rtLayout);
+ return rtLayout.width < 0.1f && rtLayout.height < 0.1f;
+}
+CXFA_FFWidget* CXFA_FFWidget::GetParent() {
+ CXFA_Node* pParentNode =
+ m_pDataAcc->GetNode()->GetNodeItem(XFA_NODEITEM_Parent);
+ if (pParentNode != NULL) {
+ CXFA_WidgetAcc* pParentWidgetAcc =
+ (CXFA_WidgetAcc*)pParentNode->GetWidgetData();
+ if (pParentWidgetAcc != NULL) {
+ return pParentWidgetAcc->GetNextWidget(NULL);
+ }
+ }
+ return NULL;
+}
+FX_BOOL CXFA_FFWidget::IsAncestorOf(CXFA_FFWidget* pWidget) {
+ if (!pWidget) {
+ return FALSE;
+ }
+ CXFA_Node* pNode = m_pDataAcc->GetNode();
+ CXFA_Node* pChildNode = pWidget->GetDataAcc()->GetNode();
+ while (pChildNode) {
+ if (pChildNode == pNode) {
+ return TRUE;
+ }
+ pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_Parent);
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_FFWidget::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) {
+ CFX_RectF rtWidget;
+ GetWidgetRect(rtWidget);
+ if (rtWidget.Contains(fx, fy)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+CXFA_FFDocView* CXFA_FFWidget::GetDocView() {
+ return m_pDocView;
+}
+CXFA_FFDoc* CXFA_FFWidget::GetDoc() {
+ return (CXFA_FFDoc*)m_pDocView->GetDoc();
+}
+CXFA_FFApp* CXFA_FFWidget::GetApp() {
+ return GetDoc()->GetApp();
+}
+IXFA_AppProvider* CXFA_FFWidget::GetAppProvider() {
+ return GetApp()->GetAppProvider();
+}
+void CXFA_FFWidget::GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth) {
+ fMinWidth = fMaxWidth = 0;
+ FX_FLOAT fWidth = 0;
+ if (m_pDataAcc->GetWidth(fWidth)) {
+ fMinWidth = fMaxWidth = fWidth;
+ } else {
+ m_pDataAcc->GetMinWidth(fMinWidth);
+ m_pDataAcc->GetMaxWidth(fMaxWidth);
+ }
+}
+void CXFA_FFWidget::GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight) {
+ fMinHeight = fMaxHeight = 0;
+ FX_FLOAT fHeight = 0;
+ if (m_pDataAcc->GetHeight(fHeight)) {
+ fMinHeight = fMaxHeight = fHeight;
+ } else {
+ m_pDataAcc->GetMinHeight(fMinHeight);
+ m_pDataAcc->GetMaxHeight(fMaxHeight);
+ }
+}
+FX_BOOL CXFA_FFWidget::IsMatchVisibleStatus(FX_DWORD dwStatus) {
+ return m_dwStatus & XFA_WIDGETSTATUS_Visible;
+}
+void CXFA_FFWidget::EventKillFocus() {
+ if (m_dwStatus & XFA_WIDGETSTATUS_Access) {
+ m_dwStatus &= ~XFA_WIDGETSTATUS_Access;
+ return;
+ }
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Exit;
+ eParam.m_pTarget = m_pDataAcc;
+ m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Exit, &eParam);
+}
+FX_BOOL CXFA_FFWidget::IsButtonDown() {
+ return (m_dwStatus & XFA_WIDGETSTATUS_ButtonDown) != 0;
+}
+void CXFA_FFWidget::SetButtonDown(FX_BOOL bSet) {
+ bSet ? m_dwStatus |= XFA_WIDGETSTATUS_ButtonDown
+ : m_dwStatus &= ~XFA_WIDGETSTATUS_ButtonDown;
+}
+int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics,
+ int32_t iStrokeType,
+ int32_t iCapType) {
+ switch (iStrokeType) {
+ case XFA_ATTRIBUTEENUM_DashDot: {
+ FX_FLOAT dashArray[] = {4, 1, 2, 1};
+ if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
+ dashArray[1] = 2;
+ dashArray[3] = 2;
+ }
+ pGraphics->SetLineDash(0, dashArray, 4);
+ return FX_DASHSTYLE_DashDot;
+ }
+ case XFA_ATTRIBUTEENUM_DashDotDot: {
+ FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1};
+ if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
+ dashArray[1] = 2;
+ dashArray[3] = 2;
+ dashArray[5] = 2;
+ }
+ pGraphics->SetLineDash(0, dashArray, 6);
+ return FX_DASHSTYLE_DashDotDot;
+ }
+ case XFA_ATTRIBUTEENUM_Dashed: {
+ FX_FLOAT dashArray[] = {5, 1};
+ if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
+ dashArray[1] = 2;
+ }
+ pGraphics->SetLineDash(0, dashArray, 2);
+ return FX_DASHSTYLE_Dash;
+ }
+ case XFA_ATTRIBUTEENUM_Dotted: {
+ FX_FLOAT dashArray[] = {2, 1};
+ if (iCapType != XFA_ATTRIBUTEENUM_Butt) {
+ dashArray[1] = 2;
+ }
+ pGraphics->SetLineDash(0, dashArray, 2);
+ return FX_DASHSTYLE_Dot;
+ }
+ default:
+ break;
+ }
+ pGraphics->SetLineDash(FX_DASHSTYLE_Solid);
+ return FX_DASHSTYLE_Solid;
+}
+CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap) {
+ switch (iLineCap) {
+ case XFA_ATTRIBUTEENUM_Round:
+ return CFX_GraphStateData::LineCapRound;
+ case XFA_ATTRIBUTEENUM_Butt:
+ return CFX_GraphStateData::LineCapButt;
+ default:
+ break;
+ }
+ return CFX_GraphStateData::LineCapSquare;
+}
+class CXFA_ImageRenderer {
+ public:
+ CXFA_ImageRenderer();
+ ~CXFA_ImageRenderer();
+ FX_BOOL Start(CFX_RenderDevice* pDevice,
+ CFX_DIBSource* pDIBSource,
+ FX_ARGB bitmap_argb,
+ int bitmap_alpha,
+ const CFX_Matrix* pImage2Device,
+ FX_DWORD flags,
+ int blendType = FXDIB_BLEND_NORMAL);
+ FX_BOOL Continue(IFX_Pause* pPause);
+
+ protected:
+ CFX_RenderDevice* m_pDevice;
+ int m_Status;
+ CFX_Matrix m_ImageMatrix;
+ CFX_DIBSource* m_pDIBSource;
+ CFX_DIBitmap* m_pCloneConvert;
+ int m_BitmapAlpha;
+ FX_ARGB m_FillArgb;
+ FX_DWORD m_Flags;
+ CFX_ImageTransformer* m_pTransformer;
+ void* m_DeviceHandle;
+ int32_t m_BlendType;
+ FX_BOOL m_Result;
+ FX_BOOL m_bPrint;
+ FX_BOOL StartDIBSource();
+ void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
+ int left,
+ int top,
+ FX_ARGB mask_argb,
+ int bitmap_alpha,
+ int blend_mode,
+ int Transparency);
+};
+CXFA_ImageRenderer::CXFA_ImageRenderer() {
+ m_pDevice = NULL;
+ m_Status = 0;
+ m_pDIBSource = NULL;
+ m_pCloneConvert = NULL;
+ m_BitmapAlpha = 255;
+ m_FillArgb = 0;
+ m_Flags = 0;
+ m_pTransformer = NULL;
+ m_DeviceHandle = NULL;
+ m_BlendType = FXDIB_BLEND_NORMAL;
+ m_Result = TRUE;
+ m_bPrint = FALSE;
+}
+CXFA_ImageRenderer::~CXFA_ImageRenderer() {
+ if (m_pCloneConvert) {
+ delete m_pCloneConvert;
+ }
+ if (m_pTransformer) {
+ delete m_pTransformer;
+ }
+ if (m_DeviceHandle) {
+ m_pDevice->CancelDIBits(m_DeviceHandle);
+ }
+}
+FX_BOOL CXFA_ImageRenderer::Start(CFX_RenderDevice* pDevice,
+ CFX_DIBSource* pDIBSource,
+ FX_ARGB bitmap_argb,
+ int bitmap_alpha,
+ const CFX_Matrix* pImage2Device,
+ FX_DWORD flags,
+ int blendType) {
+ m_pDevice = pDevice;
+ m_pDIBSource = pDIBSource;
+ m_FillArgb = bitmap_argb;
+ m_BitmapAlpha = bitmap_alpha;
+ m_ImageMatrix = *pImage2Device;
+ m_Flags = flags;
+ m_BlendType = blendType;
+ return StartDIBSource();
+}
+FX_BOOL CXFA_ImageRenderer::StartDIBSource() {
+ if (m_pDevice->StartDIBits(m_pDIBSource, m_BitmapAlpha, m_FillArgb,
+ &m_ImageMatrix, m_Flags, m_DeviceHandle, 0, NULL,
+ m_BlendType)) {
+ if (m_DeviceHandle != NULL) {
+ m_Status = 3;
+ return TRUE;
+ }
+ return FALSE;
+ }
+ CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
+ FX_RECT image_rect = image_rect_f.GetOutterRect();
+ int dest_width = image_rect.Width();
+ int dest_height = image_rect.Height();
+ if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
+ (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0)) {
+ if (m_bPrint && !(m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
+ m_Result = FALSE;
+ return FALSE;
+ }
+ CFX_DIBSource* pDib = m_pDIBSource;
+ if (m_pDIBSource->HasAlpha() &&
+ !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_IMAGE) &&
+ !(m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) {
+ m_pCloneConvert = m_pDIBSource->CloneConvert(FXDIB_Rgb);
+ if (!m_pCloneConvert) {
+ m_Result = FALSE;
+ return FALSE;
+ }
+ pDib = m_pCloneConvert;
+ }
+ FX_RECT clip_box = m_pDevice->GetClipBox();
+ clip_box.Intersect(image_rect);
+ m_Status = 2;
+ m_pTransformer = new CFX_ImageTransformer;
+ m_pTransformer->Start(pDib, &m_ImageMatrix, m_Flags, &clip_box);
+ return TRUE;
+ }
+ if (m_ImageMatrix.a < 0) {
+ dest_width = -dest_width;
+ }
+ if (m_ImageMatrix.d > 0) {
+ dest_height = -dest_height;
+ }
+ int dest_left, dest_top;
+ dest_left = dest_width > 0 ? image_rect.left : image_rect.right;
+ dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;
+ if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) {
+ if (m_pDevice->StretchDIBits(m_pDIBSource, dest_left, dest_top, dest_width,
+ dest_height, m_Flags, NULL, m_BlendType)) {
+ return FALSE;
+ }
+ }
+ if (m_pDIBSource->IsAlphaMask()) {
+ if (m_BitmapAlpha != 255) {
+ m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
+ }
+ if (m_pDevice->StretchBitMask(m_pDIBSource, dest_left, dest_top, dest_width,
+ dest_height, m_FillArgb, m_Flags)) {
+ return FALSE;
+ }
+ }
+ if (m_bPrint && !(m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
+ m_Result = FALSE;
+ return TRUE;
+ }
+ FX_RECT clip_box = m_pDevice->GetClipBox();
+ FX_RECT dest_rect = clip_box;
+ dest_rect.Intersect(image_rect);
+ FX_RECT dest_clip(
+ dest_rect.left - image_rect.left, dest_rect.top - image_rect.top,
+ dest_rect.right - image_rect.left, dest_rect.bottom - image_rect.top);
+ CFX_DIBitmap* pStretched =
+ m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip);
+ if (pStretched) {
+ CompositeDIBitmap(pStretched, dest_rect.left, dest_rect.top, m_FillArgb,
+ m_BitmapAlpha, m_BlendType, FALSE);
+ delete pStretched;
+ pStretched = NULL;
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_ImageRenderer::Continue(IFX_Pause* pPause) {
+ if (m_Status == 2) {
+ if (m_pTransformer->Continue(pPause)) {
+ return TRUE;
+ }
+ CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ if (pBitmap->IsAlphaMask()) {
+ if (m_BitmapAlpha != 255) {
+ m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
+ }
+ m_Result = m_pDevice->SetBitMask(pBitmap, m_pTransformer->m_ResultLeft,
+ m_pTransformer->m_ResultTop, m_FillArgb);
+ } else {
+ if (m_BitmapAlpha != 255) {
+ pBitmap->MultiplyAlpha(m_BitmapAlpha);
+ }
+ m_Result = m_pDevice->SetDIBits(pBitmap, m_pTransformer->m_ResultLeft,
+ m_pTransformer->m_ResultTop, m_BlendType);
+ }
+ delete pBitmap;
+ return FALSE;
+ } else if (m_Status == 3) {
+ return m_pDevice->ContinueDIBits(m_DeviceHandle, pPause);
+ }
+ return FALSE;
+}
+void CXFA_ImageRenderer::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
+ int left,
+ int top,
+ FX_ARGB mask_argb,
+ int bitmap_alpha,
+ int blend_mode,
+ int Transparency) {
+ if (pDIBitmap == NULL) {
+ return;
+ }
+ FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED;
+ FX_BOOL bGroup = Transparency & PDFTRANS_GROUP;
+ if (blend_mode == FXDIB_BLEND_NORMAL) {
+ if (!pDIBitmap->IsAlphaMask()) {
+ if (bitmap_alpha < 255) {
+ pDIBitmap->MultiplyAlpha(bitmap_alpha);
+ }
+ if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
+ return;
+ }
+ } else {
+ FX_DWORD fill_argb = (mask_argb);
+ if (bitmap_alpha < 255) {
+ ((uint8_t*)&fill_argb)[3] =
+ ((uint8_t*)&fill_argb)[3] * bitmap_alpha / 255;
+ }
+ if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
+ return;
+ }
+ }
+ }
+ FX_BOOL bBackAlphaRequired = blend_mode && bIsolated;
+ FX_BOOL bGetBackGround =
+ ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) ||
+ (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) &&
+ (m_pDevice->GetRenderCaps() & FXRC_GET_BITS) && !bBackAlphaRequired);
+ if (bGetBackGround) {
+ if (bIsolated || !bGroup) {
+ if (pDIBitmap->IsAlphaMask()) {
+ return;
+ }
+ m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode);
+ } else {
+ FX_RECT rect(left, top, left + pDIBitmap->GetWidth(),
+ top + pDIBitmap->GetHeight());
+ rect.Intersect(m_pDevice->GetClipBox());
+ CFX_DIBitmap* pClone = NULL;
+ FX_BOOL bClone = FALSE;
+ if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) {
+ bClone = TRUE;
+ pClone = m_pDevice->GetBackDrop()->Clone(&rect);
+ CFX_DIBitmap* pForeBitmap = m_pDevice->GetBitmap();
+ pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
+ pForeBitmap, rect.left, rect.top);
+ left = left >= 0 ? 0 : left;
+ top = top >= 0 ? 0 : top;
+ if (!pDIBitmap->IsAlphaMask())
+ pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
+ pDIBitmap, left, top, blend_mode);
+ else
+ pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetHeight(),
+ pDIBitmap, mask_argb, left, top, blend_mode);
+ } else {
+ pClone = pDIBitmap;
+ }
+ if (m_pDevice->GetBackDrop()) {
+ m_pDevice->SetDIBits(pClone, rect.left, rect.top);
+ } else {
+ if (pDIBitmap->IsAlphaMask()) {
+ return;
+ }
+ m_pDevice->SetDIBits(pDIBitmap, rect.left, rect.top, blend_mode);
+ }
+ if (bClone) {
+ delete pClone;
+ }
+ }
+ return;
+ }
+ if (pDIBitmap->HasAlpha() &&
+ !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_IMAGE)) {
+ CFX_DIBitmap* pCloneConvert = pDIBitmap->CloneConvert(FXDIB_Rgb);
+ if (!pCloneConvert) {
+ return;
+ }
+ CXFA_ImageRenderer imageRender;
+ FX_BOOL bRet = imageRender.Start(m_pDevice, pCloneConvert, m_FillArgb,
+ m_BitmapAlpha, &m_ImageMatrix, m_Flags);
+ while (bRet) {
+ bRet = imageRender.Continue(NULL);
+ }
+ delete pCloneConvert;
+ return;
+ }
+}
+void XFA_DrawImage(CFX_Graphics* pGS,
+ const CFX_RectF& rtImage,
+ CFX_Matrix* pMatrix,
+ CFX_DIBitmap* pDIBitmap,
+ int32_t iAspect,
+ int32_t iImageXDpi,
+ int32_t iImageYDpi,
+ int32_t iHorzAlign,
+ int32_t iVertAlign) {
+ if (rtImage.IsEmpty()) {
+ return;
+ }
+ if (!pDIBitmap || !pDIBitmap->GetBuffer()) {
+ return;
+ }
+ FX_FLOAT fWidth =
+ XFA_UnitPx2Pt((FX_FLOAT)pDIBitmap->GetWidth(), (FX_FLOAT)iImageXDpi);
+ FX_FLOAT fHeight =
+ XFA_UnitPx2Pt((FX_FLOAT)pDIBitmap->GetHeight(), (FX_FLOAT)iImageYDpi);
+ CFX_RectF rtFit;
+ rtFit.Set(rtImage.left, rtImage.top, fWidth, fHeight);
+ switch (iAspect) {
+ case XFA_ATTRIBUTEENUM_Fit: {
+ FX_FLOAT f1 = rtImage.height / rtFit.height;
+ FX_FLOAT f2 = rtImage.width / rtFit.width;
+ f1 = std::min(f1, f2);
+ rtFit.height = rtFit.height * f1;
+ rtFit.width = rtFit.width * f1;
+ } break;
+ case XFA_ATTRIBUTEENUM_Actual:
+ break;
+ case XFA_ATTRIBUTEENUM_Height: {
+ FX_FLOAT f1 = rtImage.height / rtFit.height;
+ rtFit.height = rtImage.height;
+ rtFit.width = f1 * rtFit.width;
+ } break;
+ case XFA_ATTRIBUTEENUM_None:
+ rtFit.height = rtImage.height;
+ rtFit.width = rtImage.width;
+ break;
+ case XFA_ATTRIBUTEENUM_Width: {
+ FX_FLOAT f1 = rtImage.width / rtFit.width;
+ rtFit.width = rtImage.width;
+ rtFit.height = rtFit.height * f1;
+ } break;
+ }
+ if (iHorzAlign == XFA_ATTRIBUTEENUM_Center) {
+ rtFit.left += (rtImage.width - rtFit.width) / 2;
+ } else if (iHorzAlign == XFA_ATTRIBUTEENUM_Right) {
+ rtFit.left = rtImage.right() - rtFit.width;
+ }
+ if (iVertAlign == XFA_ATTRIBUTEENUM_Middle) {
+ rtFit.top += (rtImage.height - rtFit.height) / 2;
+ } else if (iVertAlign == XFA_ATTRIBUTEENUM_Bottom) {
+ rtFit.top = rtImage.bottom() - rtImage.height;
+ }
+ CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
+ pRenderDevice->SaveState();
+ CFX_PathData path;
+ path.AppendRect(rtImage.left, rtImage.bottom(), rtImage.right(), rtImage.top);
+ pRenderDevice->SetClip_PathFill(&path, pMatrix, FXFILL_WINDING);
+ CFX_Matrix mtImage(1, 0, 0, -1, 0, 1);
+ mtImage.Concat(rtFit.width, 0, 0, rtFit.height, rtFit.left, rtFit.top);
+ mtImage.Concat(*pMatrix);
+ CXFA_ImageRenderer imageRender;
+ FX_BOOL bRet = imageRender.Start(pRenderDevice, pDIBitmap, 0, 255, &mtImage,
+ FXDIB_INTERPOL);
+ while (bRet) {
+ bRet = imageRender.Continue(NULL);
+ }
+ pRenderDevice->RestoreState();
+}
+const static uint8_t g_inv_base64[128] = {
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255,
+ 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,
+ 255, 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 255, 255, 255, 255, 255,
+};
+static uint8_t* XFA_RemoveBase64Whitespace(const uint8_t* pStr, int32_t iLen) {
+ uint8_t* pCP;
+ int32_t i = 0, j = 0;
+ if (iLen == 0) {
+ iLen = FXSYS_strlen((FX_CHAR*)pStr);
+ }
+ pCP = FX_Alloc(uint8_t, iLen + 1);
+ for (; i < iLen; i++) {
+ if ((pStr[i] & 128) == 0) {
+ if (g_inv_base64[pStr[i]] != 0xFF || pStr[i] == '=') {
+ pCP[j++] = pStr[i];
+ }
+ }
+ }
+ pCP[j] = '\0';
+ return pCP;
+}
+static int32_t XFA_Base64Decode(const FX_CHAR* pStr, uint8_t* pOutBuffer) {
+ if (pStr == NULL) {
+ return 0;
+ }
+ uint8_t* pBuffer =
+ XFA_RemoveBase64Whitespace((uint8_t*)pStr, FXSYS_strlen((FX_CHAR*)pStr));
+ if (pBuffer == NULL) {
+ return 0;
+ }
+ int32_t iLen = FXSYS_strlen((FX_CHAR*)pBuffer);
+ int32_t i = 0, j = 0;
+ FX_DWORD dwLimb = 0;
+ for (; i + 3 < iLen; i += 4) {
+ if (pBuffer[i] == '=' || pBuffer[i + 1] == '=' || pBuffer[i + 2] == '=' ||
+ pBuffer[i + 3] == '=') {
+ if (pBuffer[i] == '=' || pBuffer[i + 1] == '=') {
+ break;
+ }
+ if (pBuffer[i + 2] == '=') {
+ dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 6) |
+ ((FX_DWORD)g_inv_base64[pBuffer[i + 1]]);
+ pOutBuffer[j] = (uint8_t)(dwLimb >> 4) & 0xFF;
+ j++;
+ } else {
+ dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 12) |
+ ((FX_DWORD)g_inv_base64[pBuffer[i + 1]] << 6) |
+ ((FX_DWORD)g_inv_base64[pBuffer[i + 2]]);
+ pOutBuffer[j] = (uint8_t)(dwLimb >> 10) & 0xFF;
+ pOutBuffer[j + 1] = (uint8_t)(dwLimb >> 2) & 0xFF;
+ j += 2;
+ }
+ } else {
+ dwLimb = ((FX_DWORD)g_inv_base64[pBuffer[i]] << 18) |
+ ((FX_DWORD)g_inv_base64[pBuffer[i + 1]] << 12) |
+ ((FX_DWORD)g_inv_base64[pBuffer[i + 2]] << 6) |
+ ((FX_DWORD)g_inv_base64[pBuffer[i + 3]]);
+ pOutBuffer[j] = (uint8_t)(dwLimb >> 16) & 0xff;
+ pOutBuffer[j + 1] = (uint8_t)(dwLimb >> 8) & 0xff;
+ pOutBuffer[j + 2] = (uint8_t)(dwLimb)&0xff;
+ j += 3;
+ }
+ }
+ FX_Free(pBuffer);
+ return j;
+}
+static FX_CHAR g_base64_chars[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len) {
+ FX_CHAR* out = NULL;
+ int i, j;
+ FX_DWORD limb;
+ out = FX_Alloc(FX_CHAR, ((buf_len * 8 + 5) / 6) + 5);
+ for (i = 0, j = 0, limb = 0; i + 2 < buf_len; i += 3, j += 4) {
+ limb = ((FX_DWORD)buf[i] << 16) | ((FX_DWORD)buf[i + 1] << 8) |
+ ((FX_DWORD)buf[i + 2]);
+ out[j] = g_base64_chars[(limb >> 18) & 63];
+ out[j + 1] = g_base64_chars[(limb >> 12) & 63];
+ out[j + 2] = g_base64_chars[(limb >> 6) & 63];
+ out[j + 3] = g_base64_chars[(limb)&63];
+ }
+ switch (buf_len - i) {
+ case 0:
+ break;
+ case 1:
+ limb = ((FX_DWORD)buf[i]);
+ out[j++] = g_base64_chars[(limb >> 2) & 63];
+ out[j++] = g_base64_chars[(limb << 4) & 63];
+ out[j++] = '=';
+ out[j++] = '=';
+ break;
+ case 2:
+ limb = ((FX_DWORD)buf[i] << 8) | ((FX_DWORD)buf[i + 1]);
+ out[j++] = g_base64_chars[(limb >> 10) & 63];
+ out[j++] = g_base64_chars[(limb >> 4) & 63];
+ out[j++] = g_base64_chars[(limb << 2) & 63];
+ out[j++] = '=';
+ break;
+ default:
+ break;
+ }
+ out[j] = '\0';
+ return out;
+}
+FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideStringC& wsType) {
+ CFX_WideString wsContentType(wsType);
+ wsContentType.MakeLower();
+ if (wsContentType == FX_WSTRC(L"image/jpg")) {
+ return FXCODEC_IMAGE_JPG;
+ }
+ if (wsContentType == FX_WSTRC(L"image/png")) {
+ return FXCODEC_IMAGE_PNG;
+ }
+ if (wsContentType == FX_WSTRC(L"image/gif")) {
+ return FXCODEC_IMAGE_GIF;
+ }
+ if (wsContentType == FX_WSTRC(L"image/bmp")) {
+ return FXCODEC_IMAGE_BMP;
+ }
+ if (wsContentType == FX_WSTRC(L"image/tif")) {
+ return FXCODEC_IMAGE_TIF;
+ }
+ return FXCODEC_IMAGE_UNKNOWN;
+}
+CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc,
+ CXFA_Image* pImage,
+ FX_BOOL& bNameImage,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi) {
+ CFX_WideString wsHref;
+ pImage->GetHref(wsHref);
+ CFX_WideString wsImage;
+ pImage->GetContent(wsImage);
+ if (wsHref.IsEmpty() && wsImage.IsEmpty()) {
+ return NULL;
+ }
+ CFX_WideString wsContentType;
+ pImage->GetContentType(wsContentType);
+ FXCODEC_IMAGE_TYPE type = XFA_GetImageType(wsContentType);
+ CFX_ByteString bsContent;
+ uint8_t* pImageBuffer = NULL;
+ IFX_FileRead* pImageFileRead = NULL;
+ if (wsImage.GetLength() > 0) {
+ XFA_ATTRIBUTEENUM iEncoding =
+ (XFA_ATTRIBUTEENUM)pImage->GetTransferEncoding();
+ if (iEncoding == XFA_ATTRIBUTEENUM_Base64) {
+ CFX_ByteString bsData = wsImage.UTF8Encode();
+ int32_t iLength = bsData.GetLength();
+ pImageBuffer = FX_Alloc(uint8_t, iLength);
+ int32_t iRead = XFA_Base64Decode((const FX_CHAR*)bsData, pImageBuffer);
+ if (iRead > 0) {
+ pImageFileRead = FX_CreateMemoryStream(pImageBuffer, iRead);
+ }
+ } else {
+ bsContent = CFX_ByteString::FromUnicode(wsImage);
+ pImageFileRead = FX_CreateMemoryStream(
+ (uint8_t*)(const uint8_t*)bsContent, bsContent.GetLength());
+ }
+ } else {
+ CFX_WideString wsURL = wsHref;
+ if (wsURL.Left(7) != FX_WSTRC(L"http://") &&
+ wsURL.Left(6) != FX_WSTRC(L"ftp://")) {
+ CFX_DIBitmap* pBitmap =
+ pDoc->GetPDFNamedImage(wsURL, iImageXDpi, iImageYDpi);
+ if (pBitmap != NULL) {
+ bNameImage = TRUE;
+ return pBitmap;
+ }
+ }
+ pImageFileRead = pDoc->GetDocProvider()->OpenLinkedFile(pDoc, wsURL);
+ }
+ if (!pImageFileRead) {
+ FX_Free(pImageBuffer);
+ return NULL;
+ }
+ bNameImage = FALSE;
+ CFX_DIBitmap* pBitmap =
+ XFA_LoadImageFromBuffer(pImageFileRead, type, iImageXDpi, iImageYDpi);
+ FX_Free(pImageBuffer);
+ pImageFileRead->Release();
+ return pBitmap;
+}
+static FXDIB_Format XFA_GetDIBFormat(FXCODEC_IMAGE_TYPE type,
+ int32_t iComponents,
+ int32_t iBitsPerComponent) {
+ FXDIB_Format dibFormat = FXDIB_Argb;
+ switch (type) {
+ case FXCODEC_IMAGE_BMP:
+ case FXCODEC_IMAGE_JPG:
+ case FXCODEC_IMAGE_TIF: {
+ dibFormat = FXDIB_Rgb32;
+ int32_t bpp = iComponents * iBitsPerComponent;
+ if (bpp <= 24) {
+ dibFormat = FXDIB_Rgb;
+ }
+ } break;
+ case FXCODEC_IMAGE_PNG:
+ default:
+ break;
+ }
+ return dibFormat;
+}
+CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
+ FXCODEC_IMAGE_TYPE type,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi) {
+ CFX_GEModule* pGeModule = CFX_GEModule::Get();
+ if (!pGeModule) {
+ return NULL;
+ }
+ CCodec_ModuleMgr* pCodecMgr = pGeModule->GetCodecModule();
+ if (!pCodecMgr) {
+ return NULL;
+ }
+ CFX_DIBAttribute dibAttr;
+ CFX_DIBitmap* pBitmap = NULL;
+ ICodec_ProgressiveDecoder* pProgressiveDecoder =
+ pCodecMgr->CreateProgressiveDecoder();
+ pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr);
+ switch (dibAttr.m_wDPIUnit) {
+ case FXCODEC_RESUNIT_CENTIMETER:
+ dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI * 2.54f);
+ dibAttr.m_nYDPI = (int32_t)(dibAttr.m_nYDPI * 2.54f);
+ break;
+ case FXCODEC_RESUNIT_METER:
+ dibAttr.m_nXDPI = (int32_t)(dibAttr.m_nXDPI / (FX_FLOAT)100 * 2.54f);
+ dibAttr.m_nYDPI = (int32_t)(dibAttr.m_nYDPI / (FX_FLOAT)100 * 2.54f);
+ break;
+ ;
+ default:
+ break;
+ }
+ iImageXDpi = dibAttr.m_nXDPI > 1 ? dibAttr.m_nXDPI : (96);
+ iImageYDpi = dibAttr.m_nYDPI > 1 ? dibAttr.m_nYDPI : (96);
+ if (pProgressiveDecoder->GetWidth() > 0 &&
+ pProgressiveDecoder->GetHeight() > 0) {
+ type = pProgressiveDecoder->GetType();
+ int32_t iComponents = pProgressiveDecoder->GetNumComponents();
+ int32_t iBpc = pProgressiveDecoder->GetBPC();
+ FXDIB_Format dibFormat = XFA_GetDIBFormat(type, iComponents, iBpc);
+ pBitmap = new CFX_DIBitmap();
+ pBitmap->Create(pProgressiveDecoder->GetWidth(),
+ pProgressiveDecoder->GetHeight(), dibFormat);
+ pBitmap->Clear(0xffffffff);
+ int32_t nFrames;
+ if ((pProgressiveDecoder->GetFrames(nFrames) ==
+ FXCODEC_STATUS_DECODE_READY) &&
+ (nFrames > 0)) {
+ pProgressiveDecoder->StartDecode(pBitmap, 0, 0, pBitmap->GetWidth(),
+ pBitmap->GetHeight());
+ pProgressiveDecoder->ContinueDecode();
+ }
+ }
+ delete pProgressiveDecoder;
+ return pBitmap;
+}
+void XFA_RectWidthoutMargin(CFX_RectF& rt, const CXFA_Margin& mg, FX_BOOL bUI) {
+ if (!mg) {
+ return;
+ }
+ FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset;
+ mg.GetLeftInset(fLeftInset);
+ mg.GetTopInset(fTopInset);
+ mg.GetRightInset(fRightInset);
+ mg.GetBottomInset(fBottomInset);
+ rt.Deflate(fLeftInset, fTopInset, fRightInset, fBottomInset);
+}
+CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem) {
+ XFA_ELEMENT iType = pLayoutItem->GetFormNode()->GetClassID();
+ if (XFA_IsCreateWidget(iType)) {
+ return static_cast<CXFA_FFWidget*>(pLayoutItem);
+ }
+ return nullptr;
+}
+FX_BOOL XFA_IsCreateWidget(XFA_ELEMENT iType) {
+ return iType == XFA_ELEMENT_Field || iType == XFA_ELEMENT_Draw ||
+ iType == XFA_ELEMENT_Subform || iType == XFA_ELEMENT_ExclGroup;
+}
+static void XFA_BOX_GetPath_Arc(CXFA_Box box,
+ CFX_RectF rtDraw,
+ CFX_Path& fillPath,
+ FX_DWORD dwFlags) {
+ FX_FLOAT a, b;
+ a = rtDraw.width / 2.0f;
+ b = rtDraw.height / 2.0f;
+ if (box.IsCircular() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) {
+ a = b = std::min(a, b);
+ }
+ CFX_PointF center = rtDraw.Center();
+ rtDraw.left = center.x - a;
+ rtDraw.top = center.y - b;
+ rtDraw.width = a + a;
+ rtDraw.height = b + b;
+ FX_FLOAT startAngle = 0, sweepAngle = 360;
+ FX_BOOL bStart = box.GetStartAngle(startAngle);
+ FX_BOOL bEnd = box.GetSweepAngle(sweepAngle);
+ if (!bStart && !bEnd) {
+ fillPath.AddEllipse(rtDraw);
+ return;
+ }
+ startAngle = -startAngle * FX_PI / 180.0f;
+ sweepAngle = -sweepAngle * FX_PI / 180.0f;
+ fillPath.AddArc(rtDraw.left, rtDraw.top, rtDraw.width, rtDraw.height,
+ startAngle, sweepAngle);
+}
+static void XFA_BOX_GetPath(CXFA_Box box,
+ const CXFA_StrokeArray& strokes,
+ CFX_RectF rtWidget,
+ CFX_Path& path,
+ int32_t nIndex,
+ FX_BOOL bStart,
+ FX_BOOL bCorner) {
+ FXSYS_assert(nIndex >= 0 && nIndex < 8);
+ FX_BOOL bInverted, bRound;
+ FX_FLOAT fRadius1, fRadius2, sx, sy, vx, vy, nx, ny, offsetY, offsetX,
+ offsetEX, offsetEY;
+ CFX_PointF cpStart, cp, cp1, cp2;
+ CFX_RectF rtRadius;
+ int32_t n = (nIndex & 1) ? nIndex - 1 : nIndex;
+ CXFA_Corner corner1 = (CXFA_Node*)strokes[n];
+ CXFA_Corner corner2 = (CXFA_Node*)strokes[(n + 2) % 8];
+ fRadius1 = bCorner ? corner1.GetRadius() : 0;
+ fRadius2 = bCorner ? corner2.GetRadius() : 0;
+ bInverted = corner1.IsInverted();
+ offsetY = 0.0f;
+ offsetX = 0.0f;
+ bRound = corner1.GetJoinType() == XFA_ATTRIBUTEENUM_Round;
+ FX_FLOAT halfAfter = 0.0f;
+ FX_FLOAT halfBefore = 0.0f;
+ CXFA_Stroke stroke = strokes[nIndex];
+ if (stroke.IsCorner()) {
+ CXFA_Stroke edgeBefore = strokes[(nIndex + 1 * 8 - 1) % 8];
+ CXFA_Stroke edgeAfter = strokes[nIndex + 1];
+ if (stroke.IsInverted()) {
+ if (!stroke.SameStyles(edgeBefore)) {
+ halfBefore = edgeBefore.GetThickness() / 2;
+ }
+ if (!stroke.SameStyles(edgeAfter)) {
+ halfAfter = edgeAfter.GetThickness() / 2;
+ }
+ }
+ } else {
+ CXFA_Stroke edgeBefore = strokes[(nIndex + 8 - 2) % 8];
+ CXFA_Stroke edgeAfter = strokes[(nIndex + 2) % 8];
+ if (!bRound && !bInverted) {
+ { halfBefore = edgeBefore.GetThickness() / 2; }
+ { halfAfter = edgeAfter.GetThickness() / 2; }
+ }
+ }
+ offsetEX = 0.0f;
+ offsetEY = 0.0f;
+ if (bRound) {
+ sy = FX_PI / 2;
+ }
+ switch (nIndex) {
+ case 0:
+ case 1:
+ cp1 = rtWidget.TopLeft();
+ cp2 = rtWidget.TopRight();
+ if (nIndex == 0) {
+ cpStart.x = cp1.x - halfBefore;
+ cpStart.y = cp1.y + fRadius1, offsetY = -halfAfter;
+ } else {
+ cpStart.x = cp1.x + fRadius1 - halfBefore, cpStart.y = cp1.y,
+ offsetEX = halfAfter;
+ }
+ vx = 1, vy = 1;
+ nx = -1, ny = 0;
+ if (bRound) {
+ sx = bInverted ? FX_PI / 2 : FX_PI;
+ } else {
+ sx = 1, sy = 0;
+ }
+ break;
+ case 2:
+ case 3:
+ cp1 = rtWidget.TopRight();
+ cp2 = rtWidget.BottomRight();
+ if (nIndex == 2) {
+ cpStart.x = cp1.x - fRadius1, cpStart.y = cp1.y - halfBefore,
+ offsetX = halfAfter;
+ } else {
+ cpStart.x = cp1.x, cpStart.y = cp1.y + fRadius1 - halfBefore,
+ offsetEY = halfAfter;
+ }
+ vx = -1, vy = 1;
+ nx = 0, ny = -1;
+ if (bRound) {
+ sx = bInverted ? FX_PI : FX_PI * 3 / 2;
+ } else {
+ sx = 0, sy = 1;
+ }
+ break;
+ case 4:
+ case 5:
+ cp1 = rtWidget.BottomRight();
+ cp2 = rtWidget.BottomLeft();
+ if (nIndex == 4) {
+ cpStart.x = cp1.x + halfBefore, cpStart.y = cp1.y - fRadius1,
+ offsetY = halfAfter;
+ } else {
+ cpStart.x = cp1.x - fRadius1 + halfBefore, cpStart.y = cp1.y,
+ offsetEX = -halfAfter;
+ }
+ vx = -1, vy = -1;
+ nx = 1, ny = 0;
+ if (bRound) {
+ sx = bInverted ? FX_PI * 3 / 2 : 0;
+ } else {
+ sx = -1, sy = 0;
+ }
+ break;
+ case 6:
+ case 7:
+ cp1 = rtWidget.BottomLeft();
+ cp2 = rtWidget.TopLeft();
+ if (nIndex == 6) {
+ cpStart.x = cp1.x + fRadius1, cpStart.y = cp1.y + halfBefore,
+ offsetX = -halfAfter;
+ } else {
+ cpStart.x = cp1.x, cpStart.y = cp1.y - fRadius1 + halfBefore,
+ offsetEY = -halfAfter;
+ }
+ vx = 1, vy = -1;
+ nx = 0, ny = 1;
+ if (bRound) {
+ sx = bInverted ? 0 : FX_PI / 2;
+ } else {
+ sx = 0, sy = -1;
+ }
+ break;
+ }
+ if (bStart) {
+ path.MoveTo(cpStart.x, cpStart.y);
+ }
+ if (nIndex & 1) {
+ path.LineTo(cp2.x + fRadius2 * nx + offsetEX,
+ cp2.y + fRadius2 * ny + offsetEY);
+ return;
+ }
+ if (bRound) {
+ if (fRadius1 < 0) {
+ sx -= FX_PI;
+ }
+ if (bInverted) {
+ sy *= -1;
+ }
+ rtRadius.Set(cp1.x + offsetX * 2, cp1.y + offsetY * 2,
+ fRadius1 * 2 * vx - offsetX * 2,
+ fRadius1 * 2 * vy - offsetY * 2);
+ rtRadius.Normalize();
+ if (bInverted) {
+ rtRadius.Offset(-fRadius1 * vx, -fRadius1 * vy);
+ }
+ path.ArcTo(rtRadius.left, rtRadius.top, rtRadius.width, rtRadius.height, sx,
+ sy);
+ } else {
+ if (bInverted) {
+ cp.x = cp1.x + fRadius1 * vx, cp.y = cp1.y + fRadius1 * vy;
+ } else {
+ cp = cp1;
+ }
+ path.LineTo(cp.x, cp.y);
+ path.LineTo(cp1.x + fRadius1 * sx + offsetX,
+ cp1.y + fRadius1 * sy + offsetY);
+ }
+}
+static void XFA_BOX_GetFillPath(CXFA_Box box,
+ const CXFA_StrokeArray& strokes,
+ CFX_RectF rtWidget,
+ CFX_Path& fillPath,
+ FX_WORD dwFlags) {
+ if (box.IsArc() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) {
+ CXFA_Edge edge = box.GetEdge(0);
+ FX_FLOAT fThickness = edge.GetThickness();
+ if (fThickness < 0) {
+ fThickness = 0;
+ }
+ FX_FLOAT fHalf = fThickness / 2;
+ int32_t iHand = box.GetHand();
+ if (iHand == XFA_ATTRIBUTEENUM_Left) {
+ rtWidget.Inflate(fHalf, fHalf);
+ } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
+ rtWidget.Deflate(fHalf, fHalf);
+ }
+ XFA_BOX_GetPath_Arc(box, rtWidget, fillPath, dwFlags);
+ return;
+ }
+ FX_BOOL bSameStyles = TRUE;
+ int32_t i;
+ CXFA_Stroke stroke1 = strokes[0];
+ for (i = 1; i < 8; i++) {
+ CXFA_Stroke stroke2 = strokes[i];
+ if (!stroke1.SameStyles(stroke2)) {
+ bSameStyles = FALSE;
+ break;
+ }
+ stroke1 = stroke2;
+ }
+ if (bSameStyles) {
+ stroke1 = strokes[0];
+ for (i = 2; i < 8; i += 2) {
+ CXFA_Stroke stroke2 = strokes[i];
+ if (!stroke1.SameStyles(stroke2, XFA_STROKE_SAMESTYLE_NoPresence |
+ XFA_STROKE_SAMESTYLE_Corner)) {
+ bSameStyles = FALSE;
+ break;
+ }
+ stroke1 = stroke2;
+ }
+ if (bSameStyles) {
+ stroke1 = strokes[0];
+ if (stroke1.IsInverted()) {
+ bSameStyles = FALSE;
+ }
+ if (stroke1.GetJoinType() != XFA_ATTRIBUTEENUM_Square) {
+ bSameStyles = FALSE;
+ }
+ }
+ }
+ if (bSameStyles) {
+ fillPath.AddRectangle(rtWidget.left, rtWidget.top, rtWidget.width,
+ rtWidget.height);
+ return;
+ }
+ FX_BOOL bInverted, bRound;
+ FX_FLOAT fRadius1, fRadius2, sx, sy, vx, vy, nx, ny;
+ CFX_PointF cp, cp1, cp2;
+ CFX_RectF rtRadius;
+ for (int32_t i = 0; i < 8; i += 2) {
+ CXFA_Corner corner1 = (CXFA_Node*)strokes[i];
+ CXFA_Corner corner2 = (CXFA_Node*)strokes[(i + 2) % 8];
+ fRadius1 = corner1.GetRadius();
+ fRadius2 = corner2.GetRadius();
+ bInverted = corner1.IsInverted();
+ bRound = corner1.GetJoinType() == XFA_ATTRIBUTEENUM_Round;
+ if (bRound) {
+ sy = FX_PI / 2;
+ }
+ switch (i) {
+ case 0:
+ cp1 = rtWidget.TopLeft();
+ cp2 = rtWidget.TopRight();
+ vx = 1, vy = 1;
+ nx = -1, ny = 0;
+ if (bRound) {
+ sx = bInverted ? FX_PI / 2 : FX_PI;
+ } else {
+ sx = 1, sy = 0;
+ }
+ break;
+ case 2:
+ cp1 = rtWidget.TopRight();
+ cp2 = rtWidget.BottomRight();
+ vx = -1, vy = 1;
+ nx = 0, ny = -1;
+ if (bRound) {
+ sx = bInverted ? FX_PI : FX_PI * 3 / 2;
+ } else {
+ sx = 0, sy = 1;
+ }
+ break;
+ case 4:
+ cp1 = rtWidget.BottomRight();
+ cp2 = rtWidget.BottomLeft();
+ vx = -1, vy = -1;
+ nx = 1, ny = 0;
+ if (bRound) {
+ sx = bInverted ? FX_PI * 3 / 2 : 0;
+ } else {
+ sx = -1, sy = 0;
+ }
+ break;
+ case 6:
+ cp1 = rtWidget.BottomLeft();
+ cp2 = rtWidget.TopLeft();
+ vx = 1, vy = -1;
+ nx = 0, ny = 1;
+ if (bRound) {
+ sx = bInverted ? 0 : FX_PI / 2;
+ } else {
+ sx = 0, sy = -1;
+ }
+ break;
+ }
+ if (i == 0) {
+ fillPath.MoveTo(cp1.x, cp1.y + fRadius1);
+ }
+ if (bRound) {
+ if (fRadius1 < 0) {
+ sx -= FX_PI;
+ }
+ if (bInverted) {
+ sy *= -1;
+ }
+ rtRadius.Set(cp1.x, cp1.y, fRadius1 * 2 * vx, fRadius1 * 2 * vy);
+ rtRadius.Normalize();
+ if (bInverted) {
+ rtRadius.Offset(-fRadius1 * vx, -fRadius1 * vy);
+ }
+ fillPath.ArcTo(rtRadius.left, rtRadius.top, rtRadius.width,
+ rtRadius.height, sx, sy);
+ } else {
+ if (bInverted) {
+ cp.x = cp1.x + fRadius1 * vx, cp.y = cp1.y + fRadius1 * vy;
+ } else {
+ cp = cp1;
+ }
+ fillPath.LineTo(cp.x, cp.y);
+ fillPath.LineTo(cp1.x + fRadius1 * sx, cp1.y + fRadius1 * sy);
+ }
+ fillPath.LineTo(cp2.x + fRadius2 * nx, cp2.y + fRadius2 * ny);
+ }
+}
+static void XFA_BOX_Fill_Radial(CXFA_Box box,
+ CFX_Graphics* pGS,
+ CFX_Path& fillPath,
+ CFX_RectF rtFill,
+ CFX_Matrix* pMatrix) {
+ CXFA_Fill fill = box.GetFill();
+ FX_ARGB crStart, crEnd;
+ crStart = fill.GetColor();
+ int32_t iType = fill.GetRadial(crEnd);
+ CFX_Shading shading;
+ if (iType != XFA_ATTRIBUTEENUM_ToEdge) {
+ FX_ARGB temp = crEnd;
+ crEnd = crStart;
+ crStart = temp;
+ }
+ shading.CreateRadial(rtFill.Center(), rtFill.Center(), 0,
+ FXSYS_sqrt(rtFill.Width() * rtFill.Width() +
+ rtFill.Height() * rtFill.Height()) /
+ 2,
+ TRUE, TRUE, crStart, crEnd);
+ CFX_Color cr(&shading);
+ pGS->SetFillColor(&cr);
+ pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
+}
+static void XFA_BOX_Fill_Pattern(CXFA_Box box,
+ CFX_Graphics* pGS,
+ CFX_Path& fillPath,
+ CFX_RectF rtFill,
+ CFX_Matrix* pMatrix) {
+ CXFA_Fill fill = box.GetFill();
+ FX_ARGB crStart, crEnd;
+ crStart = fill.GetColor();
+ int32_t iType = fill.GetPattern(crEnd);
+ int32_t iHatch = FX_HATCHSTYLE_Cross;
+ switch (iType) {
+ case XFA_ATTRIBUTEENUM_CrossDiagonal:
+ iHatch = FX_HATCHSTYLE_DiagonalCross;
+ break;
+ case XFA_ATTRIBUTEENUM_DiagonalLeft:
+ iHatch = FX_HATCHSTYLE_ForwardDiagonal;
+ break;
+ case XFA_ATTRIBUTEENUM_DiagonalRight:
+ iHatch = FX_HATCHSTYLE_BackwardDiagonal;
+ break;
+ case XFA_ATTRIBUTEENUM_Horizontal:
+ iHatch = FX_HATCHSTYLE_Horizontal;
+ break;
+ case XFA_ATTRIBUTEENUM_Vertical:
+ iHatch = FX_HATCHSTYLE_Vertical;
+ break;
+ default:
+ break;
+ }
+ CFX_Pattern pattern;
+ pattern.Create(iHatch, crEnd, crStart);
+ CFX_Color cr(&pattern);
+ pGS->SetFillColor(&cr);
+ pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
+}
+static void XFA_BOX_Fill_Linear(CXFA_Box box,
+ CFX_Graphics* pGS,
+ CFX_Path& fillPath,
+ CFX_RectF rtFill,
+ CFX_Matrix* pMatrix) {
+ CXFA_Fill fill = box.GetFill();
+ FX_ARGB crStart, crEnd;
+ crStart = fill.GetColor();
+ int32_t iType = fill.GetLinear(crEnd);
+ CFX_PointF ptStart, ptEnd;
+ switch (iType) {
+ case XFA_ATTRIBUTEENUM_ToRight:
+ ptStart.Set(rtFill.left, rtFill.top);
+ ptEnd.Set(rtFill.right(), rtFill.top);
+ break;
+ case XFA_ATTRIBUTEENUM_ToBottom:
+ ptStart.Set(rtFill.left, rtFill.top);
+ ptEnd.Set(rtFill.left, rtFill.bottom());
+ break;
+ case XFA_ATTRIBUTEENUM_ToLeft:
+ ptStart.Set(rtFill.right(), rtFill.top);
+ ptEnd.Set(rtFill.left, rtFill.top);
+ break;
+ case XFA_ATTRIBUTEENUM_ToTop:
+ ptStart.Set(rtFill.left, rtFill.bottom());
+ ptEnd.Set(rtFill.left, rtFill.top);
+ break;
+ default:
+ break;
+ }
+ CFX_Shading shading;
+ shading.CreateAxial(ptStart, ptEnd, FALSE, FALSE, crStart, crEnd);
+ CFX_Color cr(&shading);
+ pGS->SetFillColor(&cr);
+ pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
+}
+static void XFA_BOX_Fill(CXFA_Box box,
+ const CXFA_StrokeArray& strokes,
+ CFX_Graphics* pGS,
+ const CFX_RectF& rtWidget,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags) {
+ CXFA_Fill fill = box.GetFill();
+ if (!fill.IsExistInXML() || fill.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
+ return;
+ }
+ pGS->SaveGraphState();
+ CFX_Path fillPath;
+ fillPath.Create();
+ XFA_BOX_GetFillPath(box, strokes, rtWidget, fillPath,
+ (dwFlags & XFA_DRAWBOX_ForceRound) != 0);
+ fillPath.Close();
+ int32_t eType = fill.GetFillType();
+ switch (eType) {
+ case XFA_ELEMENT_Radial:
+ XFA_BOX_Fill_Radial(box, pGS, fillPath, rtWidget, pMatrix);
+ break;
+ case XFA_ELEMENT_Pattern:
+ XFA_BOX_Fill_Pattern(box, pGS, fillPath, rtWidget, pMatrix);
+ break;
+ case XFA_ELEMENT_Linear:
+ XFA_BOX_Fill_Linear(box, pGS, fillPath, rtWidget, pMatrix);
+ break;
+ default: {
+ FX_ARGB cr;
+ if (eType == XFA_ELEMENT_Stipple) {
+ int32_t iRate = fill.GetStipple(cr);
+ if (iRate == 0) {
+ iRate = 100;
+ }
+ int32_t a = 0;
+ FX_COLORREF rgb;
+ ArgbDecode(cr, a, rgb);
+ cr = ArgbEncode(iRate * a / 100, rgb);
+ } else {
+ cr = fill.GetColor();
+ }
+ CFX_Color fillColor(cr);
+ pGS->SetFillColor(&fillColor);
+ pGS->FillPath(&fillPath, FXFILL_WINDING, pMatrix);
+ } break;
+ }
+ pGS->RestoreGraphState();
+}
+static void XFA_BOX_StrokePath(CXFA_Stroke stroke,
+ CFX_Path* pPath,
+ CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix) {
+ if (!stroke.IsExistInXML() || !stroke.IsVisible()) {
+ return;
+ }
+ FX_FLOAT fThickness = stroke.GetThickness();
+ if (fThickness < 0.001f) {
+ return;
+ }
+ pGS->SaveGraphState();
+ if (stroke.IsCorner() && fThickness > 2 * stroke.GetRadius()) {
+ fThickness = 2 * stroke.GetRadius();
+ }
+ pGS->SetLineWidth(fThickness, TRUE);
+ pGS->SetLineCap(CFX_GraphStateData::LineCapButt);
+ XFA_StrokeTypeSetLineDash(pGS, stroke.GetStrokeType(),
+ XFA_ATTRIBUTEENUM_Butt);
+ CFX_Color fxColor(stroke.GetColor());
+ pGS->SetStrokeColor(&fxColor);
+ pGS->StrokePath(pPath, pMatrix);
+ pGS->RestoreGraphState();
+}
+static void XFA_BOX_StrokeArc(CXFA_Box box,
+ CFX_Graphics* pGS,
+ CFX_RectF rtWidget,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags) {
+ CXFA_Edge edge = box.GetEdge(0);
+ if (!edge.IsExistInXML() || !edge.IsVisible()) {
+ return;
+ }
+ FX_BOOL bVisible = FALSE;
+ FX_FLOAT fThickness = 0;
+ int32_t i3DType = box.Get3DStyle(bVisible, fThickness);
+ if (i3DType) {
+ if (bVisible && fThickness >= 0.001f) {
+ dwFlags |= XFA_DRAWBOX_Lowered3D;
+ }
+ }
+ FX_FLOAT fHalf = edge.GetThickness() / 2;
+ if (fHalf < 0) {
+ fHalf = 0;
+ }
+ int32_t iHand = box.GetHand();
+ if (iHand == XFA_ATTRIBUTEENUM_Left) {
+ rtWidget.Inflate(fHalf, fHalf);
+ } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
+ rtWidget.Deflate(fHalf, fHalf);
+ }
+ if ((dwFlags & XFA_DRAWBOX_ForceRound) == 0 ||
+ (dwFlags & XFA_DRAWBOX_Lowered3D) == 0) {
+ if (fHalf < 0.001f) {
+ return;
+ }
+ CFX_Path arcPath;
+ arcPath.Create();
+ XFA_BOX_GetPath_Arc(box, rtWidget, arcPath, dwFlags);
+ XFA_BOX_StrokePath(edge, &arcPath, pGS, pMatrix);
+ return;
+ }
+ pGS->SaveGraphState();
+ pGS->SetLineWidth(fHalf);
+ FX_FLOAT a, b;
+ a = rtWidget.width / 2.0f;
+ b = rtWidget.height / 2.0f;
+ if (dwFlags & XFA_DRAWBOX_ForceRound) {
+ a = b = std::min(a, b);
+ }
+ CFX_PointF center = rtWidget.Center();
+ rtWidget.left = center.x - a;
+ rtWidget.top = center.y - b;
+ rtWidget.width = a + a;
+ rtWidget.height = b + b;
+ FX_FLOAT startAngle = 0, sweepAngle = 360;
+ startAngle = startAngle * FX_PI / 180.0f;
+ sweepAngle = -sweepAngle * FX_PI / 180.0f;
+ CFX_Path arcPath;
+ arcPath.Create();
+ arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
+ 3.0f * FX_PI / 4.0f, FX_PI);
+ CFX_Color cr(0xFF808080);
+ pGS->SetStrokeColor(&cr);
+ pGS->StrokePath(&arcPath, pMatrix);
+ arcPath.Clear();
+ arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
+ -1.0f * FX_PI / 4.0f, FX_PI);
+ cr.Set(0xFFFFFFFF);
+ pGS->SetStrokeColor(&cr);
+ pGS->StrokePath(&arcPath, pMatrix);
+ rtWidget.Deflate(fHalf, fHalf);
+ arcPath.Clear();
+ arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
+ 3.0f * FX_PI / 4.0f, FX_PI);
+ cr.Set(0xFF404040);
+ pGS->SetStrokeColor(&cr);
+ pGS->StrokePath(&arcPath, pMatrix);
+ arcPath.Clear();
+ arcPath.AddArc(rtWidget.left, rtWidget.top, rtWidget.width, rtWidget.height,
+ -1.0f * FX_PI / 4.0f, FX_PI);
+ cr.Set(0xFFC0C0C0);
+ pGS->SetStrokeColor(&cr);
+ pGS->StrokePath(&arcPath, pMatrix);
+ pGS->RestoreGraphState();
+}
+static void XFA_Draw3DRect(CFX_Graphics* pGraphic,
+ const CFX_RectF& rt,
+ FX_FLOAT fLineWidth,
+ CFX_Matrix* pMatrix,
+ FX_ARGB argbTopLeft,
+ FX_ARGB argbBottomRight) {
+ CFX_Color crLT(argbTopLeft);
+ pGraphic->SetFillColor(&crLT);
+ FX_FLOAT fBottom = rt.bottom();
+ FX_FLOAT fRight = rt.right();
+ CFX_Path pathLT;
+ pathLT.Create();
+ pathLT.MoveTo(rt.left, fBottom);
+ pathLT.LineTo(rt.left, rt.top);
+ pathLT.LineTo(fRight, rt.top);
+ pathLT.LineTo(fRight - fLineWidth, rt.top + fLineWidth);
+ pathLT.LineTo(rt.left + fLineWidth, rt.top + fLineWidth);
+ pathLT.LineTo(rt.left + fLineWidth, fBottom - fLineWidth);
+ pathLT.LineTo(rt.left, fBottom);
+ pGraphic->FillPath(&pathLT, FXFILL_WINDING, pMatrix);
+ CFX_Color crRB(argbBottomRight);
+ pGraphic->SetFillColor(&crRB);
+ CFX_Path pathRB;
+ pathRB.Create();
+ pathRB.MoveTo(fRight, rt.top);
+ pathRB.LineTo(fRight, fBottom);
+ pathRB.LineTo(rt.left, fBottom);
+ pathRB.LineTo(rt.left + fLineWidth, fBottom - fLineWidth);
+ pathRB.LineTo(fRight - fLineWidth, fBottom - fLineWidth);
+ pathRB.LineTo(fRight - fLineWidth, rt.top + fLineWidth);
+ pathRB.LineTo(fRight, rt.top);
+ pGraphic->FillPath(&pathRB, FXFILL_WINDING, pMatrix);
+}
+static void XFA_BOX_Stroke_3DRect_Lowered(CFX_Graphics* pGS,
+ CFX_RectF rt,
+ FX_FLOAT fThickness,
+ CFX_Matrix* pMatrix) {
+ FX_FLOAT fHalfWidth = fThickness / 2.0f;
+ CFX_RectF rtInner(rt);
+ rtInner.Deflate(fHalfWidth, fHalfWidth);
+ CFX_Color cr(0xFF000000);
+ pGS->SetFillColor(&cr);
+ CFX_Path path;
+ path.Create();
+ path.AddRectangle(rt.left, rt.top, rt.width, rt.height);
+ path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
+ pGS->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
+ XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFF808080, 0xFFC0C0C0);
+}
+static void XFA_BOX_Stroke_3DRect_Raised(CFX_Graphics* pGS,
+ CFX_RectF rt,
+ FX_FLOAT fThickness,
+ CFX_Matrix* pMatrix) {
+ FX_FLOAT fHalfWidth = fThickness / 2.0f;
+ CFX_RectF rtInner(rt);
+ rtInner.Deflate(fHalfWidth, fHalfWidth);
+ CFX_Color cr(0xFF000000);
+ pGS->SetFillColor(&cr);
+ CFX_Path path;
+ path.Create();
+ path.AddRectangle(rt.left, rt.top, rt.width, rt.height);
+ path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
+ pGS->FillPath(&path, FXFILL_ALTERNATE, pMatrix);
+ XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFFFFFFFF, 0xFF808080);
+}
+static void XFA_BOX_Stroke_3DRect_Etched(CFX_Graphics* pGS,
+ CFX_RectF rt,
+ FX_FLOAT fThickness,
+ CFX_Matrix* pMatrix) {
+ FX_FLOAT fHalfWidth = fThickness / 2.0f;
+ XFA_Draw3DRect(pGS, rt, fThickness, pMatrix, 0xFF808080, 0xFFFFFFFF);
+ CFX_RectF rtInner(rt);
+ rtInner.Deflate(fHalfWidth, fHalfWidth);
+ XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFFFFFFFF, 0xFF808080);
+}
+static void XFA_BOX_Stroke_3DRect_Embossed(CFX_Graphics* pGS,
+ CFX_RectF rt,
+ FX_FLOAT fThickness,
+ CFX_Matrix* pMatrix) {
+ FX_FLOAT fHalfWidth = fThickness / 2.0f;
+ XFA_Draw3DRect(pGS, rt, fThickness, pMatrix, 0xFF808080, 0xFF000000);
+ CFX_RectF rtInner(rt);
+ rtInner.Deflate(fHalfWidth, fHalfWidth);
+ XFA_Draw3DRect(pGS, rtInner, fHalfWidth, pMatrix, 0xFF000000, 0xFF808080);
+}
+static void XFA_BOX_Stroke_Rect(CXFA_Box box,
+ const CXFA_StrokeArray& strokes,
+ CFX_Graphics* pGS,
+ CFX_RectF rtWidget,
+ CFX_Matrix* pMatrix) {
+ FX_BOOL bVisible = FALSE;
+ FX_FLOAT fThickness = 0;
+ int32_t i3DType = box.Get3DStyle(bVisible, fThickness);
+ if (i3DType) {
+ if (!bVisible || fThickness < 0.001f) {
+ return;
+ }
+ switch (i3DType) {
+ case XFA_ATTRIBUTEENUM_Lowered:
+ XFA_BOX_Stroke_3DRect_Lowered(pGS, rtWidget, fThickness, pMatrix);
+ break;
+ case XFA_ATTRIBUTEENUM_Raised:
+ XFA_BOX_Stroke_3DRect_Raised(pGS, rtWidget, fThickness, pMatrix);
+ break;
+ case XFA_ATTRIBUTEENUM_Etched:
+ XFA_BOX_Stroke_3DRect_Etched(pGS, rtWidget, fThickness, pMatrix);
+ break;
+ case XFA_ATTRIBUTEENUM_Embossed:
+ XFA_BOX_Stroke_3DRect_Embossed(pGS, rtWidget, fThickness, pMatrix);
+ break;
+ }
+ return;
+ }
+ FX_BOOL bClose = FALSE;
+ FX_BOOL bSameStyles = TRUE;
+ int32_t i;
+ CXFA_Stroke stroke1 = strokes[0];
+ for (i = 1; i < 8; i++) {
+ CXFA_Stroke stroke2 = strokes[i];
+ if (!stroke1.SameStyles(stroke2)) {
+ bSameStyles = FALSE;
+ break;
+ }
+ stroke1 = stroke2;
+ }
+ if (bSameStyles) {
+ stroke1 = strokes[0];
+ bClose = TRUE;
+ for (i = 2; i < 8; i += 2) {
+ CXFA_Stroke stroke2 = strokes[i];
+ if (!stroke1.SameStyles(stroke2, XFA_STROKE_SAMESTYLE_NoPresence |
+ XFA_STROKE_SAMESTYLE_Corner)) {
+ bSameStyles = FALSE;
+ break;
+ }
+ stroke1 = stroke2;
+ }
+ if (bSameStyles) {
+ stroke1 = strokes[0];
+ if (stroke1.IsInverted()) {
+ bSameStyles = FALSE;
+ }
+ if (stroke1.GetJoinType() != XFA_ATTRIBUTEENUM_Square) {
+ bSameStyles = FALSE;
+ }
+ }
+ }
+ FX_BOOL bStart = TRUE;
+ CFX_Path path;
+ path.Create();
+ for (i = 0; i < 8; i++) {
+ CXFA_Stroke stroke1 = strokes[i];
+ if ((i % 1) == 0 && stroke1.GetRadius() < 0) {
+ FX_BOOL bEmpty = path.IsEmpty();
+ if (!bEmpty) {
+ XFA_BOX_StrokePath(stroke1, &path, pGS, pMatrix);
+ path.Clear();
+ }
+ bStart = TRUE;
+ continue;
+ }
+ XFA_BOX_GetPath(box, strokes, rtWidget, path, i, bStart, !bSameStyles);
+ CXFA_Stroke stroke2 = strokes[(i + 1) % 8];
+ bStart = !stroke1.SameStyles(stroke2);
+ if (bStart) {
+ XFA_BOX_StrokePath(stroke1, &path, pGS, pMatrix);
+ path.Clear();
+ }
+ }
+ FX_BOOL bEmpty = path.IsEmpty();
+ if (!bEmpty) {
+ if (bClose) {
+ path.Close();
+ }
+ XFA_BOX_StrokePath(strokes[7], &path, pGS, pMatrix);
+ }
+}
+static void XFA_BOX_Stroke(CXFA_Box box,
+ const CXFA_StrokeArray& strokes,
+ CFX_Graphics* pGS,
+ CFX_RectF rtWidget,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags) {
+ if (box.IsArc() || (dwFlags & XFA_DRAWBOX_ForceRound) != 0) {
+ XFA_BOX_StrokeArc(box, pGS, rtWidget, pMatrix, dwFlags);
+ return;
+ }
+ FX_BOOL bVisible = FALSE;
+ for (int32_t j = 0; j < 4; j++) {
+ bVisible |= strokes[j * 2 + 1].IsVisible();
+ if (bVisible) {
+ break;
+ }
+ }
+ if (!bVisible) {
+ return;
+ }
+ for (int32_t i = 1; i < 8; i += 2) {
+ CXFA_Edge edge = (CXFA_Node*)strokes[i];
+ FX_FLOAT fThickness = edge.GetThickness();
+ if (fThickness < 0) {
+ fThickness = 0;
+ }
+ FX_FLOAT fHalf = fThickness / 2;
+ int32_t iHand = box.GetHand();
+ switch (i) {
+ case 1:
+ if (iHand == XFA_ATTRIBUTEENUM_Left) {
+ rtWidget.top -= fHalf;
+ rtWidget.height += fHalf;
+ } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
+ rtWidget.top += fHalf;
+ rtWidget.height -= fHalf;
+ }
+ break;
+ case 3:
+ if (iHand == XFA_ATTRIBUTEENUM_Left) {
+ rtWidget.width += fHalf;
+ } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
+ rtWidget.width -= fHalf;
+ }
+ break;
+ case 5:
+ if (iHand == XFA_ATTRIBUTEENUM_Left) {
+ rtWidget.height += fHalf;
+ } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
+ rtWidget.height -= fHalf;
+ }
+ break;
+ case 7:
+ if (iHand == XFA_ATTRIBUTEENUM_Left) {
+ rtWidget.left -= fHalf;
+ rtWidget.width += fHalf;
+ } else if (iHand == XFA_ATTRIBUTEENUM_Right) {
+ rtWidget.left += fHalf;
+ rtWidget.width -= fHalf;
+ }
+ break;
+ }
+ }
+ XFA_BOX_Stroke_Rect(box, strokes, pGS, rtWidget, pMatrix);
+}
+void XFA_DrawBox(CXFA_Box box,
+ CFX_Graphics* pGS,
+ const CFX_RectF& rtWidget,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags) {
+ if (!box || box.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
+ return;
+ }
+ int32_t iType = box.GetClassID();
+ if (iType != XFA_ELEMENT_Arc && iType != XFA_ELEMENT_Border &&
+ iType != XFA_ELEMENT_Rectangle) {
+ return;
+ }
+ CXFA_StrokeArray strokes;
+ if (!(dwFlags & XFA_DRAWBOX_ForceRound) && iType != XFA_ELEMENT_Arc) {
+ box.GetStrokes(strokes);
+ }
+ XFA_BOX_Fill(box, strokes, pGS, rtWidget, pMatrix, dwFlags);
+ XFA_BOX_Stroke(box, strokes, pGS, rtWidget, pMatrix, dwFlags);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidget.h b/xfa/src/fxfa/src/app/xfa_ffwidget.h
index 20a7d80443..f9e4478183 100644
--- a/xfa/src/fxfa/src/app/xfa_ffwidget.h
+++ b/xfa/src/fxfa/src/app/xfa_ffwidget.h
@@ -1,186 +1,186 @@
-// 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 _FXFA_FORMFILLER_WIDGET_IMP_H
-#define _FXFA_FORMFILLER_WIDGET_IMP_H
-
-#include "xfa/include/fxfa/fxfa.h"
-
-class CXFA_FFPageView;
-class CXFA_FFDocView;
-class CXFA_FFDoc;
-class CXFA_FFApp;
-
-#define XFA_GOTO_POSITION_IF_FAIL(arg, pos) \
- { \
- if (!(arg)) \
- goto pos; \
- }
-inline FX_FLOAT XFA_UnitPx2Pt(FX_FLOAT fPx, FX_FLOAT fDpi) {
- return fPx * 72.0f / fDpi;
-}
-#define XFA_FLOAT_PERCISION 0.001f
-enum XFA_WIDGETITEM {
- XFA_WIDGETITEM_Parent,
- XFA_WIDGETITEM_FirstChild,
- XFA_WIDGETITEM_NextSibling,
- XFA_WIDGETITEM_PrevSibling,
-};
-class CXFA_CalcData {
- public:
- CXFA_CalcData() : m_iRefCount(0) {}
- ~CXFA_CalcData() { m_Globals.RemoveAll(); }
- CFX_PtrArray m_Globals;
- int32_t m_iRefCount;
-};
-class CXFA_FFWidget : public IXFA_Widget,
- public CFX_PrivateData,
- public CXFA_ContentLayoutItem {
- public:
- CXFA_FFWidget(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
- virtual ~CXFA_FFWidget();
- IXFA_PageView* GetPageView();
- void SetPageView(IXFA_PageView* pPageView);
- void GetWidgetRect(CFX_RectF& rtWidget);
- CFX_RectF ReCacheWidgetRect();
- FX_DWORD GetStatus();
- void ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved);
- virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus = FALSE);
- CXFA_WidgetAcc* GetDataAcc();
- FX_BOOL GetToolTip(CFX_WideString& wsToolTip);
- virtual void RenderWidget(CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_DWORD dwStatus = 0,
- int32_t iRotate = 0);
-
- virtual FX_BOOL IsLoaded();
- virtual FX_BOOL LoadWidget();
- virtual void UnloadWidget();
- virtual FX_BOOL PerformLayout();
- virtual FX_BOOL UpdateFWLData();
- virtual void UpdateWidgetProperty();
- virtual FX_BOOL OnMouseEnter();
- virtual FX_BOOL OnMouseExit();
- virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
-
- virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget);
- virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
- virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
- virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
- virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);
- virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL CanUndo() { return FALSE; }
- virtual FX_BOOL CanRedo() { return FALSE; }
- virtual FX_BOOL Undo() { return FALSE; }
- virtual FX_BOOL Redo() { return FALSE; }
- virtual FX_BOOL CanCopy() { return FALSE; }
- virtual FX_BOOL CanCut() { return FALSE; }
- virtual FX_BOOL CanPaste() { return FALSE; }
- virtual FX_BOOL CanSelectAll() { return FALSE; }
- virtual FX_BOOL CanDelete() { return CanCut(); }
- virtual FX_BOOL CanDeSelect() { return CanCopy(); }
- virtual FX_BOOL Copy(CFX_WideString& wsCopy) { return FALSE; }
- virtual FX_BOOL Cut(CFX_WideString& wsCut) { return FALSE; }
- virtual FX_BOOL Paste(const CFX_WideString& wsPaste) { return FALSE; }
- virtual FX_BOOL SelectAll() { return FALSE; }
- virtual FX_BOOL Delete() { return FALSE; }
- virtual FX_BOOL DeSelect() { return FALSE; }
- virtual FX_BOOL GetSuggestWords(CFX_PointF pointf,
- CFX_ByteStringArray& sSuggest) {
- return FALSE;
- }
- virtual FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf,
- const CFX_ByteStringC& bsReplace) {
- return FALSE;
- }
- CXFA_FFDocView* GetDocView();
- void SetDocView(CXFA_FFDocView* pDocView) { m_pDocView = pDocView; }
- CXFA_FFDoc* GetDoc();
- CXFA_FFApp* GetApp();
- IXFA_AppProvider* GetAppProvider();
- void InvalidateWidget(const CFX_RectF* pRect = NULL);
- void AddInvalidateRect(const CFX_RectF* pRect = NULL);
- FX_BOOL GetCaptionText(CFX_WideString& wsCap);
- FX_BOOL IsFocused();
- void Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy);
- void GetRotateMatrix(CFX_Matrix& mt);
- FX_BOOL IsLayoutRectEmpty();
- CXFA_FFWidget* GetParent();
- FX_BOOL IsAncestorOf(CXFA_FFWidget* pWidget);
-
- protected:
- virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
- void DrawBorder(CFX_Graphics* pGS,
- CXFA_Box box,
- const CFX_RectF& rtBorder,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags = 0);
- void GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth);
- void GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight);
- void GetRectWithoutRotate(CFX_RectF& rtWidget);
- FX_BOOL IsMatchVisibleStatus(FX_DWORD dwStatus);
-
- void EventKillFocus();
- FX_BOOL IsButtonDown();
- void SetButtonDown(FX_BOOL bSet);
- CXFA_FFDocView* m_pDocView;
- CXFA_FFPageView* m_pPageView;
- CXFA_WidgetAcc* m_pDataAcc;
- CFX_RectF m_rtWidget;
-};
-int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics,
- int32_t iStrokeType,
- int32_t iCapType);
-CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap);
-void XFA_DrawImage(CFX_Graphics* pGS,
- const CFX_RectF& rtImage,
- CFX_Matrix* pMatrix,
- CFX_DIBitmap* pDIBitmap,
- int32_t iAspect,
- int32_t iImageXDpi,
- int32_t iImageYDpi,
- int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left,
- int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top);
-CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc,
- CXFA_Image* pImage,
- FX_BOOL& bNameImage,
- int32_t& iImageXDpi,
- int32_t& iImageYDpi);
-CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
- FXCODEC_IMAGE_TYPE type,
- int32_t& iImageXDpi,
- int32_t& iImageYDpi);
-FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideStringC& wsType);
-FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len);
-void XFA_RectWidthoutMargin(CFX_RectF& rt,
- const CXFA_Margin& mg,
- FX_BOOL bUI = FALSE);
-FX_FLOAT XFA_GetEdgeThickness(const CXFA_StrokeArray& strokes,
- FX_BOOL b3DStyle,
- int32_t nIndex);
-CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem);
-FX_BOOL XFA_IsCreateWidget(XFA_ELEMENT iType);
-#define XFA_DRAWBOX_ForceRound 1
-#define XFA_DRAWBOX_Lowered3D 2
-void XFA_DrawBox(CXFA_Box box,
- CFX_Graphics* pGS,
- const CFX_RectF& rtWidget,
- CFX_Matrix* pMatrix,
- FX_DWORD dwFlags = 0);
-#endif
+// 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 _FXFA_FORMFILLER_WIDGET_IMP_H
+#define _FXFA_FORMFILLER_WIDGET_IMP_H
+
+#include "xfa/include/fxfa/fxfa.h"
+
+class CXFA_FFPageView;
+class CXFA_FFDocView;
+class CXFA_FFDoc;
+class CXFA_FFApp;
+
+#define XFA_GOTO_POSITION_IF_FAIL(arg, pos) \
+ { \
+ if (!(arg)) \
+ goto pos; \
+ }
+inline FX_FLOAT XFA_UnitPx2Pt(FX_FLOAT fPx, FX_FLOAT fDpi) {
+ return fPx * 72.0f / fDpi;
+}
+#define XFA_FLOAT_PERCISION 0.001f
+enum XFA_WIDGETITEM {
+ XFA_WIDGETITEM_Parent,
+ XFA_WIDGETITEM_FirstChild,
+ XFA_WIDGETITEM_NextSibling,
+ XFA_WIDGETITEM_PrevSibling,
+};
+class CXFA_CalcData {
+ public:
+ CXFA_CalcData() : m_iRefCount(0) {}
+ ~CXFA_CalcData() { m_Globals.RemoveAll(); }
+ CFX_PtrArray m_Globals;
+ int32_t m_iRefCount;
+};
+class CXFA_FFWidget : public IXFA_Widget,
+ public CFX_PrivateData,
+ public CXFA_ContentLayoutItem {
+ public:
+ CXFA_FFWidget(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
+ virtual ~CXFA_FFWidget();
+ IXFA_PageView* GetPageView();
+ void SetPageView(IXFA_PageView* pPageView);
+ void GetWidgetRect(CFX_RectF& rtWidget);
+ CFX_RectF ReCacheWidgetRect();
+ FX_DWORD GetStatus();
+ void ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved);
+ virtual FX_BOOL GetBBox(CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus = FALSE);
+ CXFA_WidgetAcc* GetDataAcc();
+ FX_BOOL GetToolTip(CFX_WideString& wsToolTip);
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_DWORD dwStatus = 0,
+ int32_t iRotate = 0);
+
+ virtual FX_BOOL IsLoaded();
+ virtual FX_BOOL LoadWidget();
+ virtual void UnloadWidget();
+ virtual FX_BOOL PerformLayout();
+ virtual FX_BOOL UpdateFWLData();
+ virtual void UpdateWidgetProperty();
+ virtual FX_BOOL OnMouseEnter();
+ virtual FX_BOOL OnMouseExit();
+ virtual FX_BOOL OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnMouseWheel(FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);
+
+ virtual FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget);
+ virtual FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget);
+ virtual FX_BOOL OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
+ virtual FX_BOOL OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);
+ virtual FX_BOOL OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);
+ virtual FX_DWORD OnHitTest(FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL CanUndo() { return FALSE; }
+ virtual FX_BOOL CanRedo() { return FALSE; }
+ virtual FX_BOOL Undo() { return FALSE; }
+ virtual FX_BOOL Redo() { return FALSE; }
+ virtual FX_BOOL CanCopy() { return FALSE; }
+ virtual FX_BOOL CanCut() { return FALSE; }
+ virtual FX_BOOL CanPaste() { return FALSE; }
+ virtual FX_BOOL CanSelectAll() { return FALSE; }
+ virtual FX_BOOL CanDelete() { return CanCut(); }
+ virtual FX_BOOL CanDeSelect() { return CanCopy(); }
+ virtual FX_BOOL Copy(CFX_WideString& wsCopy) { return FALSE; }
+ virtual FX_BOOL Cut(CFX_WideString& wsCut) { return FALSE; }
+ virtual FX_BOOL Paste(const CFX_WideString& wsPaste) { return FALSE; }
+ virtual FX_BOOL SelectAll() { return FALSE; }
+ virtual FX_BOOL Delete() { return FALSE; }
+ virtual FX_BOOL DeSelect() { return FALSE; }
+ virtual FX_BOOL GetSuggestWords(CFX_PointF pointf,
+ CFX_ByteStringArray& sSuggest) {
+ return FALSE;
+ }
+ virtual FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf,
+ const CFX_ByteStringC& bsReplace) {
+ return FALSE;
+ }
+ CXFA_FFDocView* GetDocView();
+ void SetDocView(CXFA_FFDocView* pDocView) { m_pDocView = pDocView; }
+ CXFA_FFDoc* GetDoc();
+ CXFA_FFApp* GetApp();
+ IXFA_AppProvider* GetAppProvider();
+ void InvalidateWidget(const CFX_RectF* pRect = NULL);
+ void AddInvalidateRect(const CFX_RectF* pRect = NULL);
+ FX_BOOL GetCaptionText(CFX_WideString& wsCap);
+ FX_BOOL IsFocused();
+ void Rotate2Normal(FX_FLOAT& fx, FX_FLOAT& fy);
+ void GetRotateMatrix(CFX_Matrix& mt);
+ FX_BOOL IsLayoutRectEmpty();
+ CXFA_FFWidget* GetParent();
+ FX_BOOL IsAncestorOf(CXFA_FFWidget* pWidget);
+
+ protected:
+ virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);
+ void DrawBorder(CFX_Graphics* pGS,
+ CXFA_Box box,
+ const CFX_RectF& rtBorder,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags = 0);
+ void GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth);
+ void GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight);
+ void GetRectWithoutRotate(CFX_RectF& rtWidget);
+ FX_BOOL IsMatchVisibleStatus(FX_DWORD dwStatus);
+
+ void EventKillFocus();
+ FX_BOOL IsButtonDown();
+ void SetButtonDown(FX_BOOL bSet);
+ CXFA_FFDocView* m_pDocView;
+ CXFA_FFPageView* m_pPageView;
+ CXFA_WidgetAcc* m_pDataAcc;
+ CFX_RectF m_rtWidget;
+};
+int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics,
+ int32_t iStrokeType,
+ int32_t iCapType);
+CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap);
+void XFA_DrawImage(CFX_Graphics* pGS,
+ const CFX_RectF& rtImage,
+ CFX_Matrix* pMatrix,
+ CFX_DIBitmap* pDIBitmap,
+ int32_t iAspect,
+ int32_t iImageXDpi,
+ int32_t iImageYDpi,
+ int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left,
+ int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top);
+CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc,
+ CXFA_Image* pImage,
+ FX_BOOL& bNameImage,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi);
+CFX_DIBitmap* XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead,
+ FXCODEC_IMAGE_TYPE type,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi);
+FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideStringC& wsType);
+FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len);
+void XFA_RectWidthoutMargin(CFX_RectF& rt,
+ const CXFA_Margin& mg,
+ FX_BOOL bUI = FALSE);
+FX_FLOAT XFA_GetEdgeThickness(const CXFA_StrokeArray& strokes,
+ FX_BOOL b3DStyle,
+ int32_t nIndex);
+CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem);
+FX_BOOL XFA_IsCreateWidget(XFA_ELEMENT iType);
+#define XFA_DRAWBOX_ForceRound 1
+#define XFA_DRAWBOX_Lowered3D 2
+void XFA_DrawBox(CXFA_Box box,
+ CFX_Graphics* pGS,
+ const CFX_RectF& rtWidget,
+ CFX_Matrix* pMatrix,
+ FX_DWORD dwFlags = 0);
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidgetacc.cpp b/xfa/src/fxfa/src/app/xfa_ffwidgetacc.cpp
index 717408d7a3..553a43f8fb 100644
--- a/xfa/src/fxfa/src/app/xfa_ffwidgetacc.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffwidgetacc.cpp
@@ -1,1718 +1,1718 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffdocview.h"
-#include "xfa_ffpageview.h"
-#include "xfa_ffapp.h"
-#include "xfa_textlayout.h"
-#include "xfa_fwladapter.h"
-#include "xfa_fffield.h"
-#include "xfa_ffchoicelist.h"
-#include "xfa_ffcheckbutton.h"
-#include "xfa_ffwidgetacc.h"
-#include "xfa_fontmgr.h"
-static void XFA_FFDeleteCalcData(void* pData) {
- if (pData) {
- delete ((CXFA_CalcData*)pData);
- }
-}
-static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADeleteCalcData = {
- XFA_FFDeleteCalcData, NULL};
-class CXFA_WidgetLayoutData {
- public:
- CXFA_WidgetLayoutData() : m_fWidgetHeight(-1) {}
- virtual ~CXFA_WidgetLayoutData() {}
- virtual void Release() { delete this; }
- FX_FLOAT m_fWidgetHeight;
-};
-class CXFA_TextLayoutData : public CXFA_WidgetLayoutData {
- public:
- CXFA_TextLayoutData() : m_pTextLayout(NULL), m_pTextProvider(NULL) {}
- ~CXFA_TextLayoutData() {
- if (m_pTextLayout) {
- delete m_pTextLayout;
- }
- m_pTextLayout = NULL;
- if (m_pTextProvider) {
- delete m_pTextProvider;
- }
- m_pTextProvider = NULL;
- }
- void LoadText(CXFA_WidgetAcc* pAcc) {
- if (m_pTextLayout)
- return;
-
- m_pTextProvider = new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Text);
- m_pTextLayout = new CXFA_TextLayout(m_pTextProvider);
- }
- CXFA_TextLayout* m_pTextLayout;
- CXFA_TextProvider* m_pTextProvider;
-};
-class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData {
- public:
- CXFA_ImageLayoutData()
- : m_pDIBitmap(NULL),
- m_bNamedImage(FALSE),
- m_iImageXDpi(0),
- m_iImageYDpi(0) {}
-
- ~CXFA_ImageLayoutData() {
- if (m_pDIBitmap && !m_bNamedImage) {
- delete m_pDIBitmap;
- }
- m_pDIBitmap = NULL;
- }
-
- FX_BOOL LoadImageData(CXFA_WidgetAcc* pAcc) {
- if (m_pDIBitmap) {
- return TRUE;
- }
- CXFA_Value value = pAcc->GetFormValue();
- if (!value) {
- return FALSE;
- }
- CXFA_Image imageObj = value.GetImage();
- if (!imageObj) {
- return FALSE;
- }
- CXFA_FFDoc* pFFDoc = pAcc->GetDoc();
- pAcc->SetImageImage(XFA_LoadImageData(pFFDoc, &imageObj, m_bNamedImage,
- m_iImageXDpi, m_iImageYDpi));
- return m_pDIBitmap != NULL;
- }
-
- CFX_DIBitmap* m_pDIBitmap;
- FX_BOOL m_bNamedImage;
- int32_t m_iImageXDpi;
- int32_t m_iImageYDpi;
-};
-class CXFA_FieldLayoutData : public CXFA_WidgetLayoutData {
- public:
- CXFA_FieldLayoutData()
- : m_pCapTextLayout(NULL),
- m_pCapTextProvider(NULL),
- m_pTextOut(NULL),
- m_pFieldSplitArray(NULL) {}
- ~CXFA_FieldLayoutData() {
- if (m_pCapTextLayout) {
- delete m_pCapTextLayout;
- }
- m_pCapTextLayout = NULL;
- if (m_pCapTextProvider) {
- delete m_pCapTextProvider;
- }
- m_pCapTextProvider = NULL;
- if (m_pTextOut) {
- m_pTextOut->Release();
- }
- m_pTextOut = NULL;
- if (m_pFieldSplitArray) {
- m_pFieldSplitArray->RemoveAll();
- delete m_pFieldSplitArray;
- m_pFieldSplitArray = NULL;
- }
- }
- FX_BOOL LoadCaption(CXFA_WidgetAcc* pAcc) {
- if (m_pCapTextLayout) {
- return TRUE;
- }
- CXFA_Caption caption = pAcc->GetCaption();
- if (caption.IsExistInXML() &&
- caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
- m_pCapTextProvider =
- new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption);
- m_pCapTextLayout = new CXFA_TextLayout(m_pCapTextProvider);
- return TRUE;
- }
- return FALSE;
- }
- CXFA_TextLayout* m_pCapTextLayout;
- CXFA_TextProvider* m_pCapTextProvider;
- IFDE_TextOut* m_pTextOut;
- CFX_FloatArray* m_pFieldSplitArray;
-};
-class CXFA_TextEditData : public CXFA_FieldLayoutData {
- public:
-};
-class CXFA_ImageEditData : public CXFA_FieldLayoutData {
- public:
- CXFA_ImageEditData()
- : m_pDIBitmap(NULL),
- m_bNamedImage(FALSE),
- m_iImageXDpi(0),
- m_iImageYDpi(0) {}
-
- ~CXFA_ImageEditData() {
- if (m_pDIBitmap && !m_bNamedImage) {
- delete m_pDIBitmap;
- }
- m_pDIBitmap = NULL;
- }
- FX_BOOL LoadImageData(CXFA_WidgetAcc* pAcc) {
- if (m_pDIBitmap) {
- return TRUE;
- }
- CXFA_Value value = pAcc->GetFormValue();
- if (!value) {
- return FALSE;
- }
- CXFA_Image imageObj = value.GetImage();
- CXFA_FFDoc* pFFDoc = pAcc->GetDoc();
- pAcc->SetImageEditImage(XFA_LoadImageData(pFFDoc, &imageObj, m_bNamedImage,
- m_iImageXDpi, m_iImageYDpi));
- return m_pDIBitmap != NULL;
- }
- CFX_DIBitmap* m_pDIBitmap;
- FX_BOOL m_bNamedImage;
- int32_t m_iImageXDpi;
- int32_t m_iImageYDpi;
-};
-CXFA_WidgetAcc::CXFA_WidgetAcc(CXFA_FFDocView* pDocView, CXFA_Node* pNode)
- : CXFA_WidgetData(pNode),
- m_pDocView(pDocView),
- m_pLayoutData(NULL),
- m_nRecursionDepth(0) {}
-CXFA_WidgetAcc::~CXFA_WidgetAcc() {
- if (m_pLayoutData) {
- m_pLayoutData->Release();
- m_pLayoutData = NULL;
- }
-}
-FX_BOOL CXFA_WidgetAcc::GetName(CFX_WideString& wsName, int32_t iNameType) {
- if (iNameType == 0) {
- m_pNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
- return !wsName.IsEmpty();
- }
- m_pNode->GetSOMExpression(wsName);
- if (iNameType == 2 && wsName.GetLength() >= 15) {
- CFX_WideStringC wsPre = FX_WSTRC(L"xfa[0].form[0].");
- if (wsPre == CFX_WideStringC(wsName, wsPre.GetLength())) {
- wsName.Delete(0, wsPre.GetLength());
- }
- }
- return TRUE;
-}
-CXFA_Node* CXFA_WidgetAcc::GetDatasets() {
- return m_pNode->GetBindData();
-}
-FX_BOOL CXFA_WidgetAcc::ProcessValueChanged() {
- m_pDocView->AddValidateWidget(this);
- m_pDocView->AddCalculateWidgetAcc(this);
- m_pDocView->RunCalculateWidgets();
- m_pDocView->RunValidate();
- return TRUE;
-}
-void CXFA_WidgetAcc::ResetData() {
- CFX_WideString wsValue;
- XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType();
- switch (eUIType) {
- case XFA_ELEMENT_ImageEdit: {
- CXFA_Value imageValue = GetDefaultValue();
- CXFA_Image image = imageValue.GetImage();
- CFX_WideString wsContentType, wsHref;
- if (image) {
- image.GetContent(wsValue);
- image.GetContentType(wsContentType);
- image.GetHref(wsHref);
- }
- SetImageEdit(wsContentType, wsHref, wsValue);
- } break;
- case XFA_ELEMENT_ExclGroup: {
- CXFA_Node* pNextChild = m_pNode->GetNodeItem(
- XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode);
- while (pNextChild) {
- CXFA_Node* pChild = pNextChild;
- CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pChild->GetWidgetData();
- if (!pAcc) {
- continue;
- }
- CXFA_Value defValue(NULL);
- if (wsValue.IsEmpty() && (defValue = pAcc->GetDefaultValue())) {
- defValue.GetChildValueContent(wsValue);
- this->SetValue(wsValue, XFA_VALUEPICTURE_Raw);
- pAcc->SetValue(wsValue, XFA_VALUEPICTURE_Raw);
- } else {
- CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items);
- if (!pItems) {
- continue;
- }
- CFX_WideString itemText;
- if (pItems->CountChildren(XFA_ELEMENT_UNKNOWN) > 1) {
- itemText = pItems->GetChild(1, XFA_ELEMENT_UNKNOWN)->GetContent();
- }
- pAcc->SetValue(itemText, XFA_VALUEPICTURE_Raw);
- }
- pNextChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling,
- XFA_OBJECTTYPE_ContainerNode);
- }
- } break;
- case XFA_ELEMENT_ChoiceList:
- ClearAllSelections();
- default:
- if (CXFA_Value defValue = GetDefaultValue()) {
- defValue.GetChildValueContent(wsValue);
- }
- SetValue(wsValue, XFA_VALUEPICTURE_Raw);
- break;
- }
-}
-void CXFA_WidgetAcc::SetImageEdit(const CFX_WideStringC& wsContentType,
- const CFX_WideStringC& wsHref,
- const CFX_WideStringC& wsData) {
- CXFA_Image image = GetFormValue().GetImage();
- if (image) {
- image.SetContentType(wsContentType);
- image.SetHref(wsHref);
- }
- CFX_WideString wsFormatValue(wsData);
- this->GetFormatDataValue(wsData, wsFormatValue);
- m_pNode->SetContent(wsData, wsFormatValue, TRUE);
- CXFA_Node* pBind = GetDatasets();
- if (!pBind) {
- image.SetTransferEncoding(XFA_ATTRIBUTEENUM_Base64);
- return;
- }
- pBind->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType);
- CXFA_Node* pHrefNode = pBind->GetNodeItem(XFA_NODEITEM_FirstChild);
- if (pHrefNode) {
- pHrefNode->SetCData(XFA_ATTRIBUTE_Value, wsHref);
- } else {
- IFDE_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
- FXSYS_assert(pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element);
- ((IFDE_XMLElement*)pXMLNode)->SetString(FX_WSTRC(L"href"), wsHref);
- }
-}
-
-CXFA_WidgetAcc* CXFA_WidgetAcc::GetExclGroup() {
- CXFA_Node* pExcl = m_pNode->GetNodeItem(XFA_NODEITEM_Parent);
- if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) {
- return NULL;
- }
- return (CXFA_WidgetAcc*)pExcl->GetWidgetData();
-}
-CXFA_FFDocView* CXFA_WidgetAcc::GetDocView() {
- return m_pDocView;
-}
-CXFA_FFDoc* CXFA_WidgetAcc::GetDoc() {
- return (CXFA_FFDoc*)m_pDocView->GetDoc();
-}
-CXFA_FFApp* CXFA_WidgetAcc::GetApp() {
- return GetDoc()->GetApp();
-}
-IXFA_AppProvider* CXFA_WidgetAcc::GetAppProvider() {
- return GetApp()->GetAppProvider();
-}
-int32_t CXFA_WidgetAcc::ProcessEvent(int32_t iActivity,
- CXFA_EventParam* pEventParam) {
- if (this->GetClassID() == XFA_ELEMENT_Draw) {
- return XFA_EVENTERROR_NotExist;
- }
- int32_t iRet = XFA_EVENTERROR_NotExist;
- CXFA_NodeArray eventArray;
- int32_t iCounts =
- GetEventByActivity(iActivity, eventArray, pEventParam->m_bIsFormReady);
- for (int32_t i = 0; i < iCounts; i++) {
- CXFA_Event event(eventArray[i]);
- int32_t result = ProcessEvent(event, pEventParam);
- if (i == 0) {
- iRet = result;
- } else if (result == XFA_EVENTERROR_Sucess) {
- iRet = result;
- }
- }
- return iRet;
-}
-int32_t CXFA_WidgetAcc::ProcessEvent(CXFA_Event& event,
- CXFA_EventParam* pEventParam) {
- if (!event) {
- return XFA_EVENTERROR_NotExist;
- }
- switch (event.GetEventType()) {
- case XFA_ELEMENT_Execute:
- break;
- case XFA_ELEMENT_Script: {
- CXFA_Script script = event.GetScript();
- return ExecuteScript(script, pEventParam);
- } break;
- case XFA_ELEMENT_SignData:
- break;
- case XFA_ELEMENT_Submit: {
- CXFA_Submit submit = event.GetSubmit();
- return GetDoc()->GetDocProvider()->SubmitData(GetDoc(), submit);
- }
- default:
- break;
- }
- return XFA_EVENTERROR_NotExist;
-}
-int32_t CXFA_WidgetAcc::ProcessCalculate() {
- if (this->GetClassID() == XFA_ELEMENT_Draw) {
- return XFA_EVENTERROR_NotExist;
- }
- CXFA_Calculate calc = this->GetCalculate();
- if (!calc) {
- return XFA_EVENTERROR_NotExist;
- }
- if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return XFA_EVENTERROR_Disabled;
- }
- CXFA_EventParam EventParam;
- EventParam.m_eType = XFA_EVENT_Calculate;
- CXFA_Script script = calc.GetScript();
- int32_t iRet = ExecuteScript(script, &EventParam);
- if (iRet == XFA_EVENTERROR_Sucess) {
- if (GetRawValue() != EventParam.m_wsResult) {
- FX_BOOL bNotify = GetDoc()->GetDocType() == XFA_DOCTYPE_Static;
- SetValue(EventParam.m_wsResult, XFA_VALUEPICTURE_Raw);
- UpdateUIDisplay();
- if (bNotify) {
- NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, NULL, NULL);
- }
- iRet = XFA_EVENTERROR_Sucess;
- }
- }
- return iRet;
-}
-void CXFA_WidgetAcc::ProcessScriptTestValidate(CXFA_Validate validate,
- int32_t iRet,
- FXJSE_HVALUE pRetValue,
- FX_BOOL bVersionFlag) {
- if (iRet == XFA_EVENTERROR_Sucess && pRetValue) {
- if (FXJSE_Value_IsBoolean(pRetValue) && !FXJSE_Value_ToBoolean(pRetValue)) {
- IXFA_AppProvider* pAppProvider = GetAppProvider();
- if (!pAppProvider) {
- return;
- }
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
- CFX_WideString wsScriptMsg;
- validate.GetScriptMessageText(wsScriptMsg);
- int32_t eScriptTest = validate.GetScriptTest();
- if (eScriptTest == XFA_ATTRIBUTEENUM_Warning) {
- if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return;
- }
- if (wsScriptMsg.IsEmpty()) {
- GetValidateMessage(pAppProvider, wsScriptMsg, FALSE, bVersionFlag);
- }
- if (bVersionFlag) {
- pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Warning,
- XFA_MB_OK);
- return;
- }
- if (pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Warning,
- XFA_MB_YesNo) == XFA_IDYes) {
- this->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
- }
- } else {
- if (wsScriptMsg.IsEmpty()) {
- GetValidateMessage(pAppProvider, wsScriptMsg, TRUE, bVersionFlag);
- }
- pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Error, XFA_MB_OK);
- }
- }
- }
-}
-int32_t CXFA_WidgetAcc::ProcessFormatTestValidate(CXFA_Validate validate,
- FX_BOOL bVersionFlag) {
- CFX_WideString wsRawValue = GetRawValue();
- if (!wsRawValue.IsEmpty()) {
- CFX_WideString wsPicture;
- validate.GetPicture(wsPicture);
- if (wsPicture.IsEmpty()) {
- return XFA_EVENTERROR_NotExist;
- }
- IFX_Locale* pLocale = GetLocal();
- if (!pLocale) {
- return XFA_EVENTERROR_NotExist;
- }
- CXFA_LocaleValue lcValue = XFA_GetLocaleValue(this);
- if (!lcValue.ValidateValue(lcValue.GetValue(), wsPicture, pLocale)) {
- IXFA_AppProvider* pAppProvider = GetAppProvider();
- if (!pAppProvider) {
- return XFA_EVENTERROR_NotExist;
- }
- CFX_WideString wsFormatMsg;
- validate.GetFormatMessageText(wsFormatMsg);
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
- int32_t eFormatTest = validate.GetFormatTest();
- if (eFormatTest == XFA_ATTRIBUTEENUM_Error) {
- if (wsFormatMsg.IsEmpty()) {
- GetValidateMessage(pAppProvider, wsFormatMsg, TRUE, bVersionFlag);
- }
- pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Error, XFA_MB_OK);
- return XFA_EVENTERROR_Sucess;
- }
- if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return XFA_EVENTERROR_NotExist;
- }
- if (wsFormatMsg.IsEmpty()) {
- GetValidateMessage(pAppProvider, wsFormatMsg, FALSE, bVersionFlag);
- }
- if (bVersionFlag) {
- pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Warning,
- XFA_MB_OK);
- return XFA_EVENTERROR_Sucess;
- }
- if (pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Warning,
- XFA_MB_YesNo) == XFA_IDYes) {
- this->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
- }
- return XFA_EVENTERROR_Sucess;
- }
- }
- return XFA_EVENTERROR_NotExist;
-}
-int32_t CXFA_WidgetAcc::ProcessNullTestValidate(CXFA_Validate validate,
- int32_t iFlags,
- FX_BOOL bVersionFlag) {
- CFX_WideString wsValue;
- this->GetValue(wsValue, XFA_VALUEPICTURE_Raw);
- if (!wsValue.IsEmpty()) {
- return XFA_EVENTERROR_Sucess;
- }
- if (this->m_bIsNull && (this->m_bPreNull == this->m_bIsNull)) {
- return XFA_EVENTERROR_Sucess;
- }
- int32_t eNullTest = validate.GetNullTest();
- CFX_WideString wsNullMsg;
- validate.GetNullMessageText(wsNullMsg);
- if (iFlags & 0x01) {
- int32_t iRet = XFA_EVENTERROR_Sucess;
- if (eNullTest != XFA_ATTRIBUTEENUM_Disabled) {
- iRet = XFA_EVENTERROR_Error;
- }
- if (!wsNullMsg.IsEmpty()) {
- if (eNullTest != XFA_ATTRIBUTEENUM_Disabled) {
- m_pDocView->m_arrNullTestMsg.Add(wsNullMsg);
- return XFA_EVENTERROR_Error;
- }
- return XFA_EVENTERROR_Sucess;
- }
- return iRet;
- }
- if (wsNullMsg.IsEmpty() && bVersionFlag &&
- eNullTest != XFA_ATTRIBUTEENUM_Disabled) {
- return XFA_EVENTERROR_Error;
- }
- IXFA_AppProvider* pAppProvider = GetAppProvider();
- if (!pAppProvider) {
- return XFA_EVENTERROR_NotExist;
- }
- CFX_WideString wsCaptionName;
- CFX_WideString wsTitle;
- pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
- switch (eNullTest) {
- case XFA_ATTRIBUTEENUM_Error: {
- if (wsNullMsg.IsEmpty()) {
- GetValidateCaptionName(wsCaptionName, bVersionFlag);
- CFX_WideString wsError;
- pAppProvider->LoadString(XFA_IDS_ValidateNullError, wsError);
- wsNullMsg.Format(wsError, (const FX_WCHAR*)wsCaptionName);
- }
- pAppProvider->MsgBox(wsNullMsg, wsTitle, XFA_MBICON_Status, XFA_MB_OK);
- return XFA_EVENTERROR_Error;
- }
- case XFA_ATTRIBUTEENUM_Warning: {
- if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return TRUE;
- }
- if (wsNullMsg.IsEmpty()) {
- GetValidateCaptionName(wsCaptionName, bVersionFlag);
- CFX_WideString wsWarning;
- pAppProvider->LoadString(XFA_IDS_ValidateNullWarning, wsWarning);
- wsNullMsg.Format(wsWarning, (const FX_WCHAR*)wsCaptionName,
- (const FX_WCHAR*)wsCaptionName);
- }
- if (pAppProvider->MsgBox(wsNullMsg, wsTitle, XFA_MBICON_Warning,
- XFA_MB_YesNo) == XFA_IDYes) {
- this->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
- }
- return XFA_EVENTERROR_Error;
- }
- case XFA_ATTRIBUTEENUM_Disabled:
- default:
- break;
- }
- return XFA_EVENTERROR_Sucess;
-}
-void CXFA_WidgetAcc::GetValidateCaptionName(CFX_WideString& wsCaptionName,
- FX_BOOL bVersionFlag) {
- if (!bVersionFlag) {
- CXFA_Caption caption = GetCaption();
- if (caption) {
- CXFA_Value capValue = caption.GetValue();
- if (capValue) {
- CXFA_Text capText = capValue.GetText();
- if (capText) {
- capText.GetContent(wsCaptionName);
- }
- }
- }
- }
- if (wsCaptionName.IsEmpty()) {
- GetName(wsCaptionName);
- }
-}
-void CXFA_WidgetAcc::GetValidateMessage(IXFA_AppProvider* pAppProvider,
- CFX_WideString& wsMessage,
- FX_BOOL bError,
- FX_BOOL bVersionFlag) {
- CFX_WideString wsCaptionName;
- GetValidateCaptionName(wsCaptionName, bVersionFlag);
- CFX_WideString wsError;
- if (bVersionFlag) {
- pAppProvider->LoadString(XFA_IDS_ValidateFailed, wsError);
- wsMessage.Format(wsError, (const FX_WCHAR*)wsCaptionName);
- return;
- }
- if (bError) {
- pAppProvider->LoadString(XFA_IDS_ValidateError, wsError);
- wsMessage.Format(wsError, (const FX_WCHAR*)wsCaptionName);
- return;
- }
- CFX_WideString wsWarning;
- pAppProvider->LoadString(XFA_IDS_ValidateWarning, wsWarning);
- wsMessage.Format(wsWarning, (const FX_WCHAR*)wsCaptionName,
- (const FX_WCHAR*)wsCaptionName);
-}
-int32_t CXFA_WidgetAcc::ProcessValidate(int32_t iFlags) {
- if (this->GetClassID() == XFA_ELEMENT_Draw) {
- return XFA_EVENTERROR_NotExist;
- }
- CXFA_Validate validate = this->GetValidate();
- if (!validate) {
- return XFA_EVENTERROR_NotExist;
- }
- FX_BOOL bInitDoc = ((CXFA_Node*)validate)->HasFlag(XFA_NODEFLAG_NeedsInitApp);
- FX_BOOL bStatus =
- m_pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End;
- int32_t iFormat = 0;
- FXJSE_HVALUE pRetValue = NULL;
- int32_t iRet = XFA_EVENTERROR_NotExist;
- CXFA_Script script = validate.GetScript();
- if (script) {
- CXFA_EventParam eParam;
- eParam.m_eType = XFA_EVENT_Validate;
- eParam.m_pTarget = this;
- iRet = ExecuteScript(
- script, &eParam,
- ((bInitDoc || bStatus) && this->GetRawValue().IsEmpty()) ? NULL
- : &pRetValue);
- }
- XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode();
- FX_BOOL bVersionFlag = FALSE;
- if (version < XFA_VERSION_208) {
- bVersionFlag = TRUE;
- }
- if (bInitDoc) {
- ((CXFA_Node*)validate)->SetFlag(XFA_NODEFLAG_NeedsInitApp, FALSE, FALSE);
- } else {
- iFormat = ProcessFormatTestValidate(validate, bVersionFlag);
- if (!bVersionFlag) {
- bVersionFlag = GetDoc()->GetXFADoc()->HasFlag(XFA_DOCFLAG_Scripting);
- }
- iRet |= ProcessNullTestValidate(validate, iFlags, bVersionFlag);
- }
- if (iFormat != XFA_EVENTERROR_Sucess) {
- ProcessScriptTestValidate(validate, iRet, pRetValue, bVersionFlag);
- }
- if (pRetValue) {
- FXJSE_Value_Release(pRetValue);
- }
- return iRet | iFormat;
-}
-int32_t CXFA_WidgetAcc::ExecuteScript(CXFA_Script script,
- CXFA_EventParam* pEventParam,
- FXJSE_HVALUE* pRetValue) {
- static const uint32_t MAX_RECURSION_DEPTH = 2;
- if (m_nRecursionDepth > MAX_RECURSION_DEPTH)
- return XFA_EVENTERROR_Sucess;
- FXSYS_assert(pEventParam);
- if (!script) {
- return XFA_EVENTERROR_NotExist;
- }
- if (script.GetRunAt() == XFA_ATTRIBUTEENUM_Server) {
- return XFA_EVENTERROR_Disabled;
- }
- CFX_WideString wsExpression;
- script.GetExpression(wsExpression);
- if (wsExpression.IsEmpty()) {
- return XFA_EVENTERROR_NotExist;
- }
- XFA_SCRIPTTYPE eScriptType = script.GetContentType();
- if (eScriptType == XFA_SCRIPTTYPE_Unkown) {
- return XFA_EVENTERROR_Sucess;
- }
- CXFA_FFDoc* pDoc = GetDoc();
- IXFA_ScriptContext* pContext = pDoc->GetXFADoc()->GetScriptContext();
- pContext->SetEventParam(pEventParam);
- pContext->SetRunAtType((XFA_ATTRIBUTEENUM)script.GetRunAt());
- CXFA_NodeArray refNodes;
- if (pEventParam->m_eType == XFA_EVENT_InitCalculate ||
- pEventParam->m_eType == XFA_EVENT_Calculate) {
- pContext->SetNodesOfRunScript(&refNodes);
- }
- FXJSE_HVALUE hRetValue = FXJSE_Value_Create(pContext->GetRuntime());
- ++m_nRecursionDepth;
- FX_BOOL bRet = pContext->RunScript((XFA_SCRIPTLANGTYPE)eScriptType,
- wsExpression, hRetValue, m_pNode);
- --m_nRecursionDepth;
- int32_t iRet = XFA_EVENTERROR_Error;
- if (bRet) {
- iRet = XFA_EVENTERROR_Sucess;
- if (pEventParam->m_eType == XFA_EVENT_Calculate ||
- pEventParam->m_eType == XFA_EVENT_InitCalculate) {
- if (!FXJSE_Value_IsUndefined(hRetValue)) {
- if (!FXJSE_Value_IsNull(hRetValue)) {
- CFX_ByteString bsString;
- FXJSE_Value_ToUTF8String(hRetValue, bsString);
- pEventParam->m_wsResult =
- CFX_WideString::FromUTF8(bsString, bsString.GetLength());
- }
- iRet = XFA_EVENTERROR_Sucess;
- } else {
- iRet = XFA_EVENTERROR_Error;
- }
- if (pEventParam->m_eType == XFA_EVENT_InitCalculate) {
- if ((iRet == XFA_EVENTERROR_Sucess) &&
- (GetRawValue() != pEventParam->m_wsResult)) {
- SetValue(pEventParam->m_wsResult, XFA_VALUEPICTURE_Raw);
- m_pDocView->AddValidateWidget(this);
- }
- }
- int32_t iRefs = refNodes.GetSize();
- for (int32_t r = 0; r < iRefs; r++) {
- CXFA_WidgetAcc* pRefAcc = (CXFA_WidgetAcc*)refNodes[r]->GetWidgetData();
- if (pRefAcc && pRefAcc == this) {
- continue;
- }
- CXFA_Node* pRefNode = refNodes[r];
- CXFA_CalcData* pGlobalData =
- (CXFA_CalcData*)pRefNode->GetUserData(XFA_CalcData);
- if (!pGlobalData) {
- pGlobalData = new CXFA_CalcData;
- pRefNode->SetUserData(XFA_CalcData, pGlobalData,
- &gs_XFADeleteCalcData);
- }
- if (pGlobalData->m_Globals.Find(this) < 0) {
- pGlobalData->m_Globals.Add(this);
- }
- }
- }
- }
- if (pRetValue) {
- *pRetValue = hRetValue;
- } else {
- FXJSE_Value_Release(hRetValue);
- }
- pContext->SetNodesOfRunScript(NULL);
- return iRet;
-}
-CXFA_FFWidget* CXFA_WidgetAcc::GetNextWidget(CXFA_FFWidget* pWidget) {
- CXFA_LayoutItem* pLayout = nullptr;
- if (pWidget) {
- pLayout = pWidget->GetNext();
- } else {
- pLayout = m_pDocView->GetXFALayout()->GetLayoutItem(m_pNode);
- }
- return static_cast<CXFA_FFWidget*>(pLayout);
-}
-void CXFA_WidgetAcc::UpdateUIDisplay(CXFA_FFWidget* pExcept) {
- CXFA_FFWidget* pWidget = NULL;
- while ((pWidget = this->GetNextWidget(pWidget)) != NULL) {
- if (pWidget == pExcept || !pWidget->IsLoaded() ||
- (GetUIType() != XFA_ELEMENT_CheckButton && pWidget->IsFocused())) {
- continue;
- }
- pWidget->UpdateFWLData();
- pWidget->AddInvalidateRect();
- }
-}
-void CXFA_WidgetAcc::NotifyEvent(FX_DWORD dwEvent,
- CXFA_FFWidget* pWidget,
- void* pParam,
- void* pAdditional) {
- IXFA_DocProvider* pDocProvider = GetDoc()->GetDocProvider();
- if (pWidget) {
- pDocProvider->WidgetEvent(pWidget, this, dwEvent, pParam, pAdditional);
- } else {
- pWidget = GetNextWidget(pWidget);
- if (pWidget == NULL) {
- pDocProvider->WidgetEvent(NULL, this, dwEvent, pParam, pAdditional);
- return;
- }
- while (pWidget) {
- pDocProvider->WidgetEvent(pWidget, this, dwEvent, pParam, pAdditional);
- pWidget = GetNextWidget(pWidget);
- }
- }
-}
-void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) {
- CXFA_Caption caption = this->GetCaption();
- if (!caption.IsExistInXML() ||
- caption.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
- return;
- }
- LoadCaption();
- XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType();
- int32_t iCapPlacement = caption.GetPlacementType();
- FX_FLOAT fCapReserve = caption.GetReserve();
- FX_BOOL bVert = iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
- iCapPlacement == XFA_ATTRIBUTEENUM_Bottom;
- FX_BOOL bReserveExit = fCapReserve > 0.01;
- CXFA_TextLayout* pCapTextLayout =
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout;
- if (pCapTextLayout) {
- if (!bVert && eUIType != XFA_ELEMENT_Button) {
- szCap.x = fCapReserve;
- }
- CFX_SizeF minSize;
- minSize.Set(0, 0);
- pCapTextLayout->CalcSize(minSize, szCap, szCap);
- if (bReserveExit) {
- bVert ? szCap.y = fCapReserve : szCap.x = fCapReserve;
- }
- } else {
- FX_FLOAT fFontSize = 10.0f;
- if (CXFA_Font font = caption.GetFont()) {
- fFontSize = font.GetFontSize();
- } else if (CXFA_Font widgetfont = GetFont()) {
- fFontSize = widgetfont.GetFontSize();
- }
- if (bVert) {
- szCap.y = fCapReserve > 0 ? fCapReserve : fFontSize;
- } else {
- szCap.x = fCapReserve > 0 ? fCapReserve : 0;
- szCap.y = fFontSize;
- }
- }
- if (CXFA_Margin mgCap = caption.GetMargin()) {
- FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset;
- mgCap.GetLeftInset(fLeftInset);
- mgCap.GetTopInset(fTopInset);
- mgCap.GetRightInset(fRightInset);
- mgCap.GetBottomInset(fBottomInset);
- if (bReserveExit) {
- bVert ? (szCap.x += fLeftInset + fRightInset)
- : (szCap.y += fTopInset + fBottomInset);
- } else {
- szCap.x += fLeftInset + fRightInset;
- szCap.y += fTopInset + fBottomInset;
- }
- }
-}
-FX_BOOL CXFA_WidgetAcc::CalculateFieldAutoSize(CFX_SizeF& size) {
- CFX_SizeF szCap;
- szCap.Set(0, 0);
- CalcCaptionSize(szCap);
- CFX_RectF rtUIMargin;
- GetUIMargin(rtUIMargin);
- size.x += rtUIMargin.left + rtUIMargin.width;
- size.y += rtUIMargin.top + rtUIMargin.height;
- if (szCap.x > 0 && szCap.y > 0) {
- int32_t iCapPlacement = this->GetCaption().GetPlacementType();
- switch (iCapPlacement) {
- case XFA_ATTRIBUTEENUM_Left:
- case XFA_ATTRIBUTEENUM_Right:
- case XFA_ATTRIBUTEENUM_Inline: {
- size.x += szCap.x;
- size.y = std::max(size.y, szCap.y);
- } break;
- case XFA_ATTRIBUTEENUM_Top:
- case XFA_ATTRIBUTEENUM_Bottom: {
- size.y += szCap.y;
- size.x = std::max(size.x, szCap.x);
- }
- default:
- break;
- }
- }
- return CalculateWidgetAutoSize(size);
-}
-FX_BOOL CXFA_WidgetAcc::CalculateWidgetAutoSize(CFX_SizeF& size) {
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset;
- mgWidget.GetLeftInset(fLeftInset);
- mgWidget.GetTopInset(fTopInset);
- mgWidget.GetRightInset(fRightInset);
- mgWidget.GetBottomInset(fBottomInset);
- size.x += fLeftInset + fRightInset;
- size.y += fTopInset + fBottomInset;
- }
- CXFA_Para para = this->GetPara();
- if (para.IsExistInXML()) {
- size.x += para.GetMarginLeft();
- size.x += para.GetTextIndent();
- }
- FX_FLOAT fVal = 0, fMin = 0, fMax = 0;
- if (this->GetWidth(fVal)) {
- size.x = fVal;
- } else {
- if (this->GetMinWidth(fMin)) {
- size.x = std::max(size.x, fMin);
- }
- if (this->GetMaxWidth(fMax) && fMax > 0) {
- size.x = std::min(size.x, fMax);
- }
- }
- fVal = 0, fMin = 0, fMax = 0;
- if (this->GetHeight(fVal)) {
- size.y = fVal;
- } else {
- if (this->GetMinHeight(fMin)) {
- size.y = std::max(size.y, fMin);
- }
- if (this->GetMaxHeight(fMax) && fMax > 0) {
- size.y = std::min(size.y, fMax);
- }
- }
- return TRUE;
-}
-void CXFA_WidgetAcc::CalculateTextContentSize(CFX_SizeF& size) {
- FX_FLOAT fFontSize = GetFontSize();
- CFX_WideString wsText;
- this->GetValue(wsText, XFA_VALUEPICTURE_Display);
- if (wsText.IsEmpty()) {
- size.y += fFontSize;
- return;
- }
- FX_WCHAR wcEnter = '\n';
- FX_WCHAR wsLast = wsText.GetAt(wsText.GetLength() - 1);
- if (wsLast == wcEnter) {
- wsText = wsText + wcEnter;
- }
- if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut) {
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut = IFDE_TextOut::Create();
- IFDE_TextOut* pTextOut = ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut;
- pTextOut->SetFont(GetFDEFont());
- pTextOut->SetFontSize(fFontSize);
- pTextOut->SetLineBreakTolerance(fFontSize * 0.2f);
- pTextOut->SetLineSpace(GetLineHeight());
- FX_DWORD dwStyles = FDE_TTOSTYLE_LastLineHeight;
- if (GetUIType() == XFA_ELEMENT_TextEdit && IsMultiLine()) {
- dwStyles |= FDE_TTOSTYLE_LineWrap;
- }
- pTextOut->SetStyles(dwStyles);
- }
- ((CXFA_FieldLayoutData*)m_pLayoutData)
- ->m_pTextOut->CalcLogicSize(wsText, wsText.GetLength(), size);
-}
-FX_BOOL CXFA_WidgetAcc::CalculateTextEditAutoSize(CFX_SizeF& size) {
- if (size.x > 0) {
- CFX_SizeF szOrz = size;
- CFX_SizeF szCap;
- szCap.Set(0, 0);
- CalcCaptionSize(szCap);
- FX_BOOL bCapExit = szCap.x > 0.01 && szCap.y > 0.01;
- int32_t iCapPlacement = XFA_ATTRIBUTEENUM_Unknown;
- if (bCapExit) {
- iCapPlacement = this->GetCaption().GetPlacementType();
- switch (iCapPlacement) {
- case XFA_ATTRIBUTEENUM_Left:
- case XFA_ATTRIBUTEENUM_Right:
- case XFA_ATTRIBUTEENUM_Inline: {
- size.x -= szCap.x;
- }
- default:
- break;
- }
- }
- CFX_RectF rtUIMargin;
- GetUIMargin(rtUIMargin);
- size.x -= rtUIMargin.left + rtUIMargin.width;
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- FX_FLOAT fLeftInset, fRightInset;
- mgWidget.GetLeftInset(fLeftInset);
- mgWidget.GetRightInset(fRightInset);
- size.x -= fLeftInset + fRightInset;
- }
- CalculateTextContentSize(size);
- size.y += rtUIMargin.top + rtUIMargin.height;
- if (bCapExit) {
- switch (iCapPlacement) {
- case XFA_ATTRIBUTEENUM_Left:
- case XFA_ATTRIBUTEENUM_Right:
- case XFA_ATTRIBUTEENUM_Inline: {
- size.y = std::max(size.y, szCap.y);
- } break;
- case XFA_ATTRIBUTEENUM_Top:
- case XFA_ATTRIBUTEENUM_Bottom: {
- size.y += szCap.y;
- }
- default:
- break;
- }
- }
- size.x = szOrz.x;
- return CalculateWidgetAutoSize(size);
- }
- CalculateTextContentSize(size);
- return CalculateFieldAutoSize(size);
-}
-FX_BOOL CXFA_WidgetAcc::CalculateCheckButtonAutoSize(CFX_SizeF& size) {
- FX_FLOAT fCheckSize = this->GetCheckButtonSize();
- size.x = size.y = fCheckSize;
- return CalculateFieldAutoSize(size);
-}
-FX_BOOL CXFA_WidgetAcc::CalculatePushButtonAutoSize(CFX_SizeF& size) {
- CalcCaptionSize(size);
- return CalculateWidgetAutoSize(size);
-}
-FX_BOOL CXFA_WidgetAcc::CalculateImageAutoSize(CFX_SizeF& size) {
- if (!GetImageImage()) {
- LoadImageImage();
- }
- size.Set(0, 0);
- if (CFX_DIBitmap* pBitmap = GetImageImage()) {
- CFX_RectF rtImage, rtFit;
- rtImage.Set(0, 0, 0, 0);
- rtFit.Set(0, 0, 0, 0);
- int32_t iImageXDpi = 0;
- int32_t iImageYDpi = 0;
- GetImageDpi(iImageXDpi, iImageYDpi);
- rtImage.width =
- XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetWidth(), (FX_FLOAT)iImageXDpi);
- rtImage.height =
- XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetHeight(), (FX_FLOAT)iImageYDpi);
- if (GetWidth(rtFit.width)) {
- GetWidthWithoutMargin(rtFit.width);
- } else {
- rtFit.width = rtImage.width;
- }
- if (GetHeight(rtFit.height)) {
- GetHeightWithoutMargin(rtFit.height);
- } else {
- rtFit.height = rtImage.height;
- }
- size.x = rtFit.width;
- size.y = rtFit.height;
- }
- return CalculateWidgetAutoSize(size);
-}
-FX_BOOL CXFA_WidgetAcc::CalculateImageEditAutoSize(CFX_SizeF& size) {
- if (!GetImageEditImage()) {
- LoadImageEditImage();
- }
- size.Set(0, 0);
- if (CFX_DIBitmap* pBitmap = GetImageEditImage()) {
- CFX_RectF rtImage, rtFit;
- rtImage.Set(0, 0, 0, 0);
- rtFit.Set(0, 0, 0, 0);
- int32_t iImageXDpi = 0;
- int32_t iImageYDpi = 0;
- GetImageEditDpi(iImageXDpi, iImageYDpi);
- rtImage.width =
- XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetWidth(), (FX_FLOAT)iImageXDpi);
- rtImage.height =
- XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetHeight(), (FX_FLOAT)iImageYDpi);
- if (GetWidth(rtFit.width)) {
- GetWidthWithoutMargin(rtFit.width);
- } else {
- rtFit.width = rtImage.width;
- }
- if (GetHeight(rtFit.height)) {
- GetHeightWithoutMargin(rtFit.height);
- } else {
- rtFit.height = rtImage.height;
- }
- size.x = rtFit.width;
- size.y = rtFit.height;
- }
- return CalculateFieldAutoSize(size);
-}
-FX_BOOL CXFA_WidgetAcc::LoadImageImage() {
- InitLayoutData();
- return ((CXFA_ImageLayoutData*)m_pLayoutData)->LoadImageData(this);
-}
-FX_BOOL CXFA_WidgetAcc::LoadImageEditImage() {
- InitLayoutData();
- return ((CXFA_ImageEditData*)m_pLayoutData)->LoadImageData(this);
-}
-void CXFA_WidgetAcc::GetImageDpi(int32_t& iImageXDpi, int32_t& iImageYDpi) {
- iImageXDpi = ((CXFA_ImageLayoutData*)m_pLayoutData)->m_iImageXDpi;
- iImageYDpi = ((CXFA_ImageLayoutData*)m_pLayoutData)->m_iImageYDpi;
-}
-void CXFA_WidgetAcc::GetImageEditDpi(int32_t& iImageXDpi, int32_t& iImageYDpi) {
- iImageXDpi = ((CXFA_ImageEditData*)m_pLayoutData)->m_iImageXDpi;
- iImageYDpi = ((CXFA_ImageEditData*)m_pLayoutData)->m_iImageYDpi;
-}
-FX_BOOL CXFA_WidgetAcc::CalculateTextAutoSize(CFX_SizeF& size) {
- LoadText();
- CXFA_TextLayout* pTextLayout =
- ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout;
- if (pTextLayout) {
- size.x = pTextLayout->StartLayout(size.x);
- size.y = pTextLayout->GetLayoutHeight();
- }
- return CalculateWidgetAutoSize(size);
-}
-void CXFA_WidgetAcc::LoadText() {
- InitLayoutData();
- ((CXFA_TextLayoutData*)m_pLayoutData)->LoadText(this);
-}
-FX_FLOAT CXFA_WidgetAcc::CalculateWidgetAutoWidth(FX_FLOAT fWidthCalc) {
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- FX_FLOAT fLeftInset, fRightInset;
- mgWidget.GetLeftInset(fLeftInset);
- mgWidget.GetRightInset(fRightInset);
- fWidthCalc += fLeftInset + fRightInset;
- }
- FX_FLOAT fMin = 0, fMax = 0;
- if (this->GetMinWidth(fMin)) {
- fWidthCalc = std::max(fWidthCalc, fMin);
- }
- if (this->GetMaxWidth(fMax) && fMax > 0) {
- fWidthCalc = std::min(fWidthCalc, fMax);
- }
- return fWidthCalc;
-}
-FX_FLOAT CXFA_WidgetAcc::GetWidthWithoutMargin(FX_FLOAT fWidthCalc) {
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- FX_FLOAT fLeftInset, fRightInset;
- mgWidget.GetLeftInset(fLeftInset);
- mgWidget.GetRightInset(fRightInset);
- fWidthCalc -= fLeftInset + fRightInset;
- }
- return fWidthCalc;
-}
-FX_FLOAT CXFA_WidgetAcc::CalculateWidgetAutoHeight(FX_FLOAT fHeightCalc) {
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- FX_FLOAT fTopInset, fBottomInset;
- mgWidget.GetTopInset(fTopInset);
- mgWidget.GetBottomInset(fBottomInset);
- fHeightCalc += fTopInset + fBottomInset;
- }
- FX_FLOAT fMin = 0, fMax = 0;
- if (this->GetMinHeight(fMin)) {
- fHeightCalc = std::max(fHeightCalc, fMin);
- }
- if (this->GetMaxHeight(fMax) && fMax > 0) {
- fHeightCalc = std::min(fHeightCalc, fMax);
- }
- return fHeightCalc;
-}
-FX_FLOAT CXFA_WidgetAcc::GetHeightWithoutMargin(FX_FLOAT fHeightCalc) {
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- FX_FLOAT fTopInset, fBottomInset;
- mgWidget.GetTopInset(fTopInset);
- mgWidget.GetBottomInset(fBottomInset);
- fHeightCalc -= fTopInset + fBottomInset;
- }
- return fHeightCalc;
-}
-void CXFA_WidgetAcc::StartWidgetLayout(FX_FLOAT& fCalcWidth,
- FX_FLOAT& fCalcHeight) {
- InitLayoutData();
- XFA_ELEMENT eUIType = GetUIType();
- if (eUIType == XFA_ELEMENT_Text) {
- m_pLayoutData->m_fWidgetHeight = -1;
- GetHeight(m_pLayoutData->m_fWidgetHeight);
- StartTextLayout(fCalcWidth, fCalcHeight);
- return;
- }
- if (fCalcWidth > 0 && fCalcHeight > 0) {
- return;
- }
- m_pLayoutData->m_fWidgetHeight = -1;
- FX_FLOAT fWidth = 0;
- if (fCalcWidth > 0 && fCalcHeight < 0) {
- if (!GetHeight(fCalcHeight)) {
- CalculateAccWidthAndHeight(eUIType, fCalcWidth, fCalcHeight);
- }
- m_pLayoutData->m_fWidgetHeight = fCalcHeight;
- return;
- }
- if (fCalcWidth < 0 && fCalcHeight < 0) {
- if (!GetWidth(fWidth) || !GetHeight(fCalcHeight)) {
- CalculateAccWidthAndHeight(eUIType, fWidth, fCalcHeight);
- }
- fCalcWidth = fWidth;
- }
- m_pLayoutData->m_fWidgetHeight = fCalcHeight;
-}
-void CXFA_WidgetAcc::CalculateAccWidthAndHeight(XFA_ELEMENT eUIType,
- FX_FLOAT& fWidth,
- FX_FLOAT& fCalcHeight) {
- CFX_SizeF sz;
- sz.Set(fWidth, m_pLayoutData->m_fWidgetHeight);
- switch (eUIType) {
- case XFA_ELEMENT_Barcode:
- case XFA_ELEMENT_ChoiceList:
- case XFA_ELEMENT_Signature:
- CalculateFieldAutoSize(sz);
- break;
- case XFA_ELEMENT_ImageEdit:
- CalculateImageEditAutoSize(sz);
- break;
- case XFA_ELEMENT_Button:
- CalculatePushButtonAutoSize(sz);
- break;
- case XFA_ELEMENT_CheckButton:
- CalculateCheckButtonAutoSize(sz);
- break;
- case XFA_ELEMENT_DateTimeEdit:
- case XFA_ELEMENT_NumericEdit:
- case XFA_ELEMENT_PasswordEdit:
- case XFA_ELEMENT_TextEdit:
- CalculateTextEditAutoSize(sz);
- break;
- case XFA_ELEMENT_Image:
- CalculateImageAutoSize(sz);
- break;
- case XFA_ELEMENT_Arc:
- case XFA_ELEMENT_Line:
- case XFA_ELEMENT_Rectangle:
- case XFA_ELEMENT_Subform:
- case XFA_ELEMENT_ExclGroup:
- CalculateWidgetAutoSize(sz);
- break;
- default:
- break;
- }
- fWidth = sz.x;
- m_pLayoutData->m_fWidgetHeight = sz.y;
- fCalcHeight = sz.y;
-}
-FX_BOOL CXFA_WidgetAcc::FindSplitPos(int32_t iBlockIndex,
- FX_FLOAT& fCalcHeight) {
- XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType();
- if (eUIType == XFA_ELEMENT_Subform) {
- return FALSE;
- }
- if (eUIType != XFA_ELEMENT_Text && eUIType != XFA_ELEMENT_TextEdit &&
- eUIType != XFA_ELEMENT_NumericEdit &&
- eUIType != XFA_ELEMENT_PasswordEdit) {
- fCalcHeight = 0;
- return TRUE;
- }
- FX_FLOAT fTopInset = 0;
- FX_FLOAT fBottomInset = 0;
- if (iBlockIndex == 0) {
- CXFA_Margin mgWidget = this->GetMargin();
- if (mgWidget.IsExistInXML()) {
- mgWidget.GetTopInset(fTopInset);
- mgWidget.GetBottomInset(fBottomInset);
- }
- CFX_RectF rtUIMargin;
- this->GetUIMargin(rtUIMargin);
- fTopInset += rtUIMargin.top;
- fBottomInset += rtUIMargin.width;
- }
- if (eUIType == XFA_ELEMENT_Text) {
- FX_FLOAT fHeight = fCalcHeight;
- if (iBlockIndex == 0) {
- fCalcHeight = fCalcHeight - fTopInset;
- if (fCalcHeight < 0) {
- fCalcHeight = 0;
- }
- }
- CXFA_TextLayout* pTextLayout =
- ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout;
- pTextLayout->DoLayout(iBlockIndex, fCalcHeight, fCalcHeight,
- m_pLayoutData->m_fWidgetHeight - fTopInset);
- if (fCalcHeight != 0) {
- if (iBlockIndex == 0) {
- fCalcHeight = fCalcHeight + fTopInset;
- }
- if (fabs(fHeight - fCalcHeight) < XFA_FLOAT_PERCISION) {
- return FALSE;
- }
- }
- return TRUE;
- }
- XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown;
- FX_FLOAT fCapReserve = 0;
- if (iBlockIndex == 0) {
- CXFA_Caption caption = GetCaption();
- if (caption.IsExistInXML() &&
- caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
- iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType();
- fCapReserve = caption.GetReserve();
- }
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Top &&
- fCalcHeight < fCapReserve + fTopInset) {
- fCalcHeight = 0;
- return TRUE;
- }
- if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom &&
- m_pLayoutData->m_fWidgetHeight - fCapReserve - fBottomInset) {
- fCalcHeight = 0;
- return TRUE;
- }
- if (iCapPlacement != XFA_ATTRIBUTEENUM_Top) {
- fCapReserve = 0;
- }
- }
- int32_t iLinesCount = 0;
- FX_FLOAT fHeight = m_pLayoutData->m_fWidgetHeight;
- CFX_WideString wsText;
- this->GetValue(wsText, XFA_VALUEPICTURE_Display);
- if (wsText.IsEmpty()) {
- iLinesCount = 1;
- } else {
- if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut) {
- FX_FLOAT fWidth = 0;
- GetWidth(fWidth);
- CalculateAccWidthAndHeight(eUIType, fWidth, fHeight);
- }
- iLinesCount =
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut->GetTotalLines();
- }
- if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray) {
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray =
- new CFX_FloatArray;
- }
- CFX_FloatArray* pFieldArray =
- ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray;
- int32_t iFieldSplitCount = pFieldArray->GetSize();
- for (int32_t i = 0; i < iBlockIndex * 3; i += 3) {
- iLinesCount -= (int32_t)pFieldArray->GetAt(i + 1);
- fHeight -= pFieldArray->GetAt(i + 2);
- }
- if (iLinesCount == 0) {
- return FALSE;
- }
- FX_FLOAT fLineHeight = GetLineHeight();
- FX_FLOAT fFontSize = GetFontSize();
- FX_FLOAT fTextHeight = iLinesCount * fLineHeight - fLineHeight + fFontSize;
- FX_FLOAT fSpaceAbove = 0;
- FX_FLOAT fStartOffset = 0;
- if (fHeight > 0.1f && iBlockIndex == 0) {
- fStartOffset = fTopInset;
- fHeight -= (fTopInset + fBottomInset);
- if (CXFA_Para para = this->GetPara()) {
- fSpaceAbove = para.GetSpaceAbove();
- FX_FLOAT fSpaceBelow = para.GetSpaceBelow();
- fHeight -= (fSpaceAbove + fSpaceBelow);
- switch (para.GetVerticalAlign()) {
- case XFA_ATTRIBUTEENUM_Top:
- fStartOffset += fSpaceAbove;
- break;
- case XFA_ATTRIBUTEENUM_Middle:
- fStartOffset += ((fHeight - fTextHeight) / 2 + fSpaceAbove);
- break;
- case XFA_ATTRIBUTEENUM_Bottom:
- fStartOffset += (fHeight - fTextHeight + fSpaceAbove);
- break;
- }
- }
- if (fStartOffset < 0.1f) {
- fStartOffset = 0;
- }
- }
- for (int32_t i = iBlockIndex - 1; iBlockIndex > 0 && i < iBlockIndex; i++) {
- fStartOffset = pFieldArray->GetAt(i * 3) - pFieldArray->GetAt(i * 3 + 2);
- if (fStartOffset < 0.1f) {
- fStartOffset = 0;
- }
- }
- if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
- pFieldArray->SetAt(0, fStartOffset);
- } else {
- pFieldArray->Add(fStartOffset);
- }
- XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode();
- FX_BOOL bCanSplitNoContent = FALSE;
- XFA_ATTRIBUTEENUM eLayoutMode;
- this->GetNode()
- ->GetNodeItem(XFA_NODEITEM_Parent)
- ->TryEnum(XFA_ATTRIBUTE_Layout, eLayoutMode, TRUE);
- if ((eLayoutMode == XFA_ATTRIBUTEENUM_Position ||
- eLayoutMode == XFA_ATTRIBUTEENUM_Tb ||
- eLayoutMode == XFA_ATTRIBUTEENUM_Row ||
- eLayoutMode == XFA_ATTRIBUTEENUM_Table) &&
- version > XFA_VERSION_208) {
- bCanSplitNoContent = TRUE;
- }
- if ((eLayoutMode == XFA_ATTRIBUTEENUM_Tb ||
- eLayoutMode == XFA_ATTRIBUTEENUM_Row ||
- eLayoutMode == XFA_ATTRIBUTEENUM_Table) &&
- version <= XFA_VERSION_208) {
- if (fStartOffset < fCalcHeight) {
- bCanSplitNoContent = TRUE;
- } else {
- fCalcHeight = 0;
- return TRUE;
- }
- }
- if (bCanSplitNoContent) {
- if ((fCalcHeight - fTopInset - fSpaceAbove < fLineHeight)) {
- fCalcHeight = 0;
- return TRUE;
- }
- if (fStartOffset + XFA_FLOAT_PERCISION >= fCalcHeight) {
- if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
- pFieldArray->SetAt(iBlockIndex * 3 + 1, 0);
- pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight);
- } else {
- pFieldArray->Add(0);
- pFieldArray->Add(fCalcHeight);
- }
- return FALSE;
- }
- if (fCalcHeight - fStartOffset < fLineHeight) {
- fCalcHeight = fStartOffset;
- if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
- pFieldArray->SetAt(iBlockIndex * 3 + 1, 0);
- pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight);
- } else {
- pFieldArray->Add(0);
- pFieldArray->Add(fCalcHeight);
- }
- return TRUE;
- }
- FX_FLOAT fTextNum =
- fCalcHeight + XFA_FLOAT_PERCISION - fCapReserve - fStartOffset;
- int32_t iLineNum =
- (int32_t)((fTextNum + (fLineHeight - fFontSize)) / fLineHeight);
- if (iLineNum >= iLinesCount) {
- if (fCalcHeight - fStartOffset - fTextHeight >= fFontSize) {
- if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
- pFieldArray->SetAt(iBlockIndex * 3 + 1, (FX_FLOAT)iLinesCount);
- pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight);
- } else {
- pFieldArray->Add((FX_FLOAT)iLinesCount);
- pFieldArray->Add(fCalcHeight);
- }
- return FALSE;
- }
- if (fHeight - fStartOffset - fTextHeight < fFontSize) {
- iLineNum -= 1;
- if (iLineNum == 0) {
- fCalcHeight = 0;
- return TRUE;
- }
- } else {
- iLineNum = (int32_t)(fTextNum / fLineHeight);
- }
- }
- if (iLineNum > 0) {
- FX_FLOAT fSplitHeight =
- iLineNum * fLineHeight + fCapReserve + fStartOffset;
- if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
- pFieldArray->SetAt(iBlockIndex * 3 + 1, (FX_FLOAT)iLineNum);
- pFieldArray->SetAt(iBlockIndex * 3 + 2, fSplitHeight);
- } else {
- pFieldArray->Add((FX_FLOAT)iLineNum);
- pFieldArray->Add(fSplitHeight);
- }
- if (fabs(fSplitHeight - fCalcHeight) < XFA_FLOAT_PERCISION) {
- return FALSE;
- }
- fCalcHeight = fSplitHeight;
- return TRUE;
- }
- }
- fCalcHeight = 0;
- return TRUE;
-}
-void CXFA_WidgetAcc::InitLayoutData() {
- if (m_pLayoutData) {
- return;
- }
- switch (GetUIType()) {
- case XFA_ELEMENT_Text:
- m_pLayoutData = new CXFA_TextLayoutData;
- return;
- case XFA_ELEMENT_TextEdit:
- m_pLayoutData = new CXFA_TextEditData;
- return;
- case XFA_ELEMENT_Image:
- m_pLayoutData = new CXFA_ImageLayoutData;
- return;
- case XFA_ELEMENT_ImageEdit:
- m_pLayoutData = new CXFA_ImageEditData;
- return;
- default:
- break;
- }
- if (GetClassID() == XFA_ELEMENT_Field) {
- m_pLayoutData = new CXFA_FieldLayoutData;
- } else {
- m_pLayoutData = new CXFA_WidgetLayoutData;
- }
-}
-void CXFA_WidgetAcc::StartTextLayout(FX_FLOAT& fCalcWidth,
- FX_FLOAT& fCalcHeight) {
- LoadText();
- CXFA_TextLayout* pTextLayout =
- ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout;
- FX_FLOAT fTextHeight = 0;
- if (fCalcWidth > 0 && fCalcHeight > 0) {
- FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth);
- pTextLayout->StartLayout(fWidth);
- fTextHeight = fCalcHeight;
- fTextHeight = GetHeightWithoutMargin(fTextHeight);
- pTextLayout->DoLayout(0, fTextHeight, -1, fTextHeight);
- return;
- }
- if (fCalcWidth > 0 && fCalcHeight < 0) {
- FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth);
- pTextLayout->StartLayout(fWidth);
- }
- if (fCalcWidth < 0 && fCalcHeight < 0) {
- FX_FLOAT fMaxWidth = -1;
- FX_BOOL bRet = GetWidth(fMaxWidth);
- if (bRet) {
- FX_FLOAT fWidth = GetWidthWithoutMargin(fMaxWidth);
- pTextLayout->StartLayout(fWidth);
- } else {
- FX_FLOAT fWidth = pTextLayout->StartLayout(fMaxWidth);
- fMaxWidth = CalculateWidgetAutoWidth(fWidth);
- fWidth = GetWidthWithoutMargin(fMaxWidth);
- pTextLayout->StartLayout(fWidth);
- }
- fCalcWidth = fMaxWidth;
- }
- if (m_pLayoutData->m_fWidgetHeight < 0) {
- m_pLayoutData->m_fWidgetHeight = pTextLayout->GetLayoutHeight();
- m_pLayoutData->m_fWidgetHeight =
- CalculateWidgetAutoHeight(m_pLayoutData->m_fWidgetHeight);
- }
- fTextHeight = m_pLayoutData->m_fWidgetHeight;
- fTextHeight = GetHeightWithoutMargin(fTextHeight);
- pTextLayout->DoLayout(0, fTextHeight, -1, fTextHeight);
- fCalcHeight = m_pLayoutData->m_fWidgetHeight;
-}
-FX_BOOL CXFA_WidgetAcc::LoadCaption() {
- InitLayoutData();
- return ((CXFA_FieldLayoutData*)m_pLayoutData)->LoadCaption(this);
-}
-CXFA_TextLayout* CXFA_WidgetAcc::GetCaptionTextLayout() {
- return m_pLayoutData
- ? ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout
- : NULL;
-}
-CXFA_TextLayout* CXFA_WidgetAcc::GetTextLayout() {
- return m_pLayoutData ? ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout
- : NULL;
-}
-CFX_DIBitmap* CXFA_WidgetAcc::GetImageImage() {
- return m_pLayoutData ? ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap
- : NULL;
-}
-CFX_DIBitmap* CXFA_WidgetAcc::GetImageEditImage() {
- return m_pLayoutData ? ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap
- : NULL;
-}
-void CXFA_WidgetAcc::SetImageImage(CFX_DIBitmap* newImage) {
- if (((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap == newImage) {
- return;
- }
- if (((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap &&
- !((CXFA_ImageLayoutData*)m_pLayoutData)->m_bNamedImage) {
- delete ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap;
- ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap = NULL;
- }
- ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap = newImage;
-}
-void CXFA_WidgetAcc::SetImageEditImage(CFX_DIBitmap* newImage) {
- if (((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap == newImage) {
- return;
- }
- if (((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap &&
- !((CXFA_ImageEditData*)m_pLayoutData)->m_bNamedImage) {
- delete ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap;
- ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap = NULL;
- }
- ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap = newImage;
-}
-CXFA_WidgetLayoutData* CXFA_WidgetAcc::GetWidgetLayoutData() {
- return m_pLayoutData;
-}
-IFX_Font* CXFA_WidgetAcc::GetFDEFont() {
- CFX_WideStringC wsFontName = FX_WSTRC(L"Courier");
- FX_DWORD dwFontStyle = 0;
- if (CXFA_Font font = this->GetFont()) {
- if (font.IsBold()) {
- dwFontStyle |= FX_FONTSTYLE_Bold;
- }
- if (font.IsItalic()) {
- dwFontStyle |= FX_FONTSTYLE_Italic;
- }
- font.GetTypeface(wsFontName);
- }
- CXFA_FFDoc* pDoc = GetDoc();
- return pDoc->GetApp()->GetXFAFontMgr()->GetFont(pDoc, wsFontName,
- dwFontStyle);
-}
-FX_FLOAT CXFA_WidgetAcc::GetFontSize() {
- FX_FLOAT fFontSize = 10.0f;
- if (CXFA_Font font = this->GetFont()) {
- fFontSize = font.GetFontSize();
- }
- return fFontSize < 0.1f ? 10.0f : fFontSize;
-}
-FX_FLOAT CXFA_WidgetAcc::GetLineHeight() {
- FX_FLOAT fLineHeight = 0;
- if (CXFA_Para para = this->GetPara()) {
- fLineHeight = para.GetLineHeight();
- }
- if (fLineHeight < 1) {
- fLineHeight = GetFontSize() * 1.2f;
- }
- return fLineHeight;
-}
-FX_ARGB CXFA_WidgetAcc::GetTextColor() {
- if (CXFA_Font font = this->GetFont()) {
- return font.GetColor();
- }
- return 0xFF000000;
-}
-CXFA_Node* CXFA_TextProvider::GetTextNode(FX_BOOL& bRichText) {
- bRichText = FALSE;
- if (m_pTextNode) {
- if (m_pTextNode->GetClassID() == XFA_ELEMENT_ExData) {
- CFX_WideString wsContentType;
- m_pTextNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType,
- FALSE);
- if (wsContentType.Equal(FX_WSTRC(L"text/html"))) {
- bRichText = TRUE;
- }
- }
- return m_pTextNode;
- }
- if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
- CXFA_Node* pElementNode = m_pWidgetAcc->GetNode();
- CXFA_Node* pValueNode = pElementNode->GetChild(0, XFA_ELEMENT_Value);
- if (!pValueNode) {
- return NULL;
- }
- CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
- if (pChildNode && pChildNode->GetClassID() == XFA_ELEMENT_ExData) {
- CFX_WideString wsContentType;
- pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE);
- if (wsContentType.Equal(FX_WSTRC(L"text/html"))) {
- bRichText = TRUE;
- }
- }
- return pChildNode;
- } else if (m_eType == XFA_TEXTPROVIDERTYPE_Datasets) {
- CXFA_Node* pBind = m_pWidgetAcc->GetDatasets();
- IFDE_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
- FXSYS_assert(pXMLNode);
- for (IFDE_XMLNode* pXMLChild =
- pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild);
- pXMLChild;
- pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- if (pXMLChild->GetType() == FDE_XMLNODE_Element) {
- IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLChild;
- if (XFA_RecognizeRichText(pElement)) {
- bRichText = TRUE;
- }
- }
- }
- return pBind;
- } else if (m_eType == XFA_TEXTPROVIDERTYPE_Caption) {
- CXFA_Node* pCaptionNode =
- m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption);
- if (pCaptionNode == NULL) {
- return NULL;
- }
- CXFA_Node* pValueNode = pCaptionNode->GetChild(0, XFA_ELEMENT_Value);
- if (pValueNode == NULL) {
- return NULL;
- }
- CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
- if (pChildNode && pChildNode->GetClassID() == XFA_ELEMENT_ExData) {
- CFX_WideString wsContentType;
- pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE);
- if (wsContentType.Equal(FX_WSTRC(L"text/html"))) {
- bRichText = TRUE;
- }
- }
- return pChildNode;
- }
- CXFA_Node* pItemNode =
- m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Items);
- if (pItemNode == NULL) {
- return NULL;
- }
- CXFA_Node* pNode = pItemNode->GetNodeItem(XFA_NODEITEM_FirstChild);
- while (pNode) {
- CFX_WideStringC wsName;
- pNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
- if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover &&
- wsName == FX_WSTRC(L"rollover")) {
- return pNode;
- }
- if (m_eType == XFA_TEXTPROVIDERTYPE_Down && wsName == FX_WSTRC(L"down")) {
- return pNode;
- }
- pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling);
- }
- return NULL;
-}
-CXFA_Para CXFA_TextProvider::GetParaNode() {
- if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
- return m_pWidgetAcc->GetPara();
- }
- CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption);
- return pNode->GetChild(0, XFA_ELEMENT_Para);
-}
-CXFA_Font CXFA_TextProvider::GetFontNode() {
- if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
- return m_pWidgetAcc->GetFont();
- }
- CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption);
- pNode = pNode->GetChild(0, XFA_ELEMENT_Font);
- if (pNode) {
- return pNode;
- }
- return m_pWidgetAcc->GetFont();
-}
-FX_BOOL CXFA_TextProvider::IsCheckButtonAndAutoWidth() {
- XFA_ELEMENT eType = m_pWidgetAcc->GetUIType();
- if (eType == XFA_ELEMENT_CheckButton) {
- FX_FLOAT fWidth = 0;
- return !m_pWidgetAcc->GetWidth(fWidth);
- }
- return FALSE;
-}
-FX_BOOL CXFA_TextProvider::GetEmbbedObj(FX_BOOL bURI,
- FX_BOOL bRaw,
- const CFX_WideString& wsAttr,
- CFX_WideString& wsValue) {
- if (m_eType != XFA_TEXTPROVIDERTYPE_Text) {
- return FALSE;
- }
- if (bURI) {
- CXFA_Node* pWidgetNode = m_pWidgetAcc->GetNode();
- CXFA_Node* pParent = pWidgetNode->GetNodeItem(XFA_NODEITEM_Parent);
- CXFA_Document* pDocument = pWidgetNode->GetDocument();
- CXFA_Node* pIDNode = NULL;
- CXFA_WidgetAcc* pEmbAcc = NULL;
- if (pParent) {
- pIDNode = pDocument->GetNodeByID(pParent, wsAttr);
- }
- if (!pIDNode) {
- pIDNode = pDocument->GetNodeByID(
- (CXFA_Node*)pDocument->GetXFANode(XFA_HASHCODE_Form), wsAttr);
- }
- if (pIDNode) {
- pEmbAcc = (CXFA_WidgetAcc*)pIDNode->GetWidgetData();
- }
- if (pEmbAcc) {
- pEmbAcc->GetValue(wsValue, XFA_VALUEPICTURE_Display);
- return TRUE;
- }
- }
- return FALSE;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffdocview.h"
+#include "xfa_ffpageview.h"
+#include "xfa_ffapp.h"
+#include "xfa_textlayout.h"
+#include "xfa_fwladapter.h"
+#include "xfa_fffield.h"
+#include "xfa_ffchoicelist.h"
+#include "xfa_ffcheckbutton.h"
+#include "xfa_ffwidgetacc.h"
+#include "xfa_fontmgr.h"
+static void XFA_FFDeleteCalcData(void* pData) {
+ if (pData) {
+ delete ((CXFA_CalcData*)pData);
+ }
+}
+static XFA_MAPDATABLOCKCALLBACKINFO gs_XFADeleteCalcData = {
+ XFA_FFDeleteCalcData, NULL};
+class CXFA_WidgetLayoutData {
+ public:
+ CXFA_WidgetLayoutData() : m_fWidgetHeight(-1) {}
+ virtual ~CXFA_WidgetLayoutData() {}
+ virtual void Release() { delete this; }
+ FX_FLOAT m_fWidgetHeight;
+};
+class CXFA_TextLayoutData : public CXFA_WidgetLayoutData {
+ public:
+ CXFA_TextLayoutData() : m_pTextLayout(NULL), m_pTextProvider(NULL) {}
+ ~CXFA_TextLayoutData() {
+ if (m_pTextLayout) {
+ delete m_pTextLayout;
+ }
+ m_pTextLayout = NULL;
+ if (m_pTextProvider) {
+ delete m_pTextProvider;
+ }
+ m_pTextProvider = NULL;
+ }
+ void LoadText(CXFA_WidgetAcc* pAcc) {
+ if (m_pTextLayout)
+ return;
+
+ m_pTextProvider = new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Text);
+ m_pTextLayout = new CXFA_TextLayout(m_pTextProvider);
+ }
+ CXFA_TextLayout* m_pTextLayout;
+ CXFA_TextProvider* m_pTextProvider;
+};
+class CXFA_ImageLayoutData : public CXFA_WidgetLayoutData {
+ public:
+ CXFA_ImageLayoutData()
+ : m_pDIBitmap(NULL),
+ m_bNamedImage(FALSE),
+ m_iImageXDpi(0),
+ m_iImageYDpi(0) {}
+
+ ~CXFA_ImageLayoutData() {
+ if (m_pDIBitmap && !m_bNamedImage) {
+ delete m_pDIBitmap;
+ }
+ m_pDIBitmap = NULL;
+ }
+
+ FX_BOOL LoadImageData(CXFA_WidgetAcc* pAcc) {
+ if (m_pDIBitmap) {
+ return TRUE;
+ }
+ CXFA_Value value = pAcc->GetFormValue();
+ if (!value) {
+ return FALSE;
+ }
+ CXFA_Image imageObj = value.GetImage();
+ if (!imageObj) {
+ return FALSE;
+ }
+ CXFA_FFDoc* pFFDoc = pAcc->GetDoc();
+ pAcc->SetImageImage(XFA_LoadImageData(pFFDoc, &imageObj, m_bNamedImage,
+ m_iImageXDpi, m_iImageYDpi));
+ return m_pDIBitmap != NULL;
+ }
+
+ CFX_DIBitmap* m_pDIBitmap;
+ FX_BOOL m_bNamedImage;
+ int32_t m_iImageXDpi;
+ int32_t m_iImageYDpi;
+};
+class CXFA_FieldLayoutData : public CXFA_WidgetLayoutData {
+ public:
+ CXFA_FieldLayoutData()
+ : m_pCapTextLayout(NULL),
+ m_pCapTextProvider(NULL),
+ m_pTextOut(NULL),
+ m_pFieldSplitArray(NULL) {}
+ ~CXFA_FieldLayoutData() {
+ if (m_pCapTextLayout) {
+ delete m_pCapTextLayout;
+ }
+ m_pCapTextLayout = NULL;
+ if (m_pCapTextProvider) {
+ delete m_pCapTextProvider;
+ }
+ m_pCapTextProvider = NULL;
+ if (m_pTextOut) {
+ m_pTextOut->Release();
+ }
+ m_pTextOut = NULL;
+ if (m_pFieldSplitArray) {
+ m_pFieldSplitArray->RemoveAll();
+ delete m_pFieldSplitArray;
+ m_pFieldSplitArray = NULL;
+ }
+ }
+ FX_BOOL LoadCaption(CXFA_WidgetAcc* pAcc) {
+ if (m_pCapTextLayout) {
+ return TRUE;
+ }
+ CXFA_Caption caption = pAcc->GetCaption();
+ if (caption.IsExistInXML() &&
+ caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
+ m_pCapTextProvider =
+ new CXFA_TextProvider(pAcc, XFA_TEXTPROVIDERTYPE_Caption);
+ m_pCapTextLayout = new CXFA_TextLayout(m_pCapTextProvider);
+ return TRUE;
+ }
+ return FALSE;
+ }
+ CXFA_TextLayout* m_pCapTextLayout;
+ CXFA_TextProvider* m_pCapTextProvider;
+ IFDE_TextOut* m_pTextOut;
+ CFX_FloatArray* m_pFieldSplitArray;
+};
+class CXFA_TextEditData : public CXFA_FieldLayoutData {
+ public:
+};
+class CXFA_ImageEditData : public CXFA_FieldLayoutData {
+ public:
+ CXFA_ImageEditData()
+ : m_pDIBitmap(NULL),
+ m_bNamedImage(FALSE),
+ m_iImageXDpi(0),
+ m_iImageYDpi(0) {}
+
+ ~CXFA_ImageEditData() {
+ if (m_pDIBitmap && !m_bNamedImage) {
+ delete m_pDIBitmap;
+ }
+ m_pDIBitmap = NULL;
+ }
+ FX_BOOL LoadImageData(CXFA_WidgetAcc* pAcc) {
+ if (m_pDIBitmap) {
+ return TRUE;
+ }
+ CXFA_Value value = pAcc->GetFormValue();
+ if (!value) {
+ return FALSE;
+ }
+ CXFA_Image imageObj = value.GetImage();
+ CXFA_FFDoc* pFFDoc = pAcc->GetDoc();
+ pAcc->SetImageEditImage(XFA_LoadImageData(pFFDoc, &imageObj, m_bNamedImage,
+ m_iImageXDpi, m_iImageYDpi));
+ return m_pDIBitmap != NULL;
+ }
+ CFX_DIBitmap* m_pDIBitmap;
+ FX_BOOL m_bNamedImage;
+ int32_t m_iImageXDpi;
+ int32_t m_iImageYDpi;
+};
+CXFA_WidgetAcc::CXFA_WidgetAcc(CXFA_FFDocView* pDocView, CXFA_Node* pNode)
+ : CXFA_WidgetData(pNode),
+ m_pDocView(pDocView),
+ m_pLayoutData(NULL),
+ m_nRecursionDepth(0) {}
+CXFA_WidgetAcc::~CXFA_WidgetAcc() {
+ if (m_pLayoutData) {
+ m_pLayoutData->Release();
+ m_pLayoutData = NULL;
+ }
+}
+FX_BOOL CXFA_WidgetAcc::GetName(CFX_WideString& wsName, int32_t iNameType) {
+ if (iNameType == 0) {
+ m_pNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
+ return !wsName.IsEmpty();
+ }
+ m_pNode->GetSOMExpression(wsName);
+ if (iNameType == 2 && wsName.GetLength() >= 15) {
+ CFX_WideStringC wsPre = FX_WSTRC(L"xfa[0].form[0].");
+ if (wsPre == CFX_WideStringC(wsName, wsPre.GetLength())) {
+ wsName.Delete(0, wsPre.GetLength());
+ }
+ }
+ return TRUE;
+}
+CXFA_Node* CXFA_WidgetAcc::GetDatasets() {
+ return m_pNode->GetBindData();
+}
+FX_BOOL CXFA_WidgetAcc::ProcessValueChanged() {
+ m_pDocView->AddValidateWidget(this);
+ m_pDocView->AddCalculateWidgetAcc(this);
+ m_pDocView->RunCalculateWidgets();
+ m_pDocView->RunValidate();
+ return TRUE;
+}
+void CXFA_WidgetAcc::ResetData() {
+ CFX_WideString wsValue;
+ XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType();
+ switch (eUIType) {
+ case XFA_ELEMENT_ImageEdit: {
+ CXFA_Value imageValue = GetDefaultValue();
+ CXFA_Image image = imageValue.GetImage();
+ CFX_WideString wsContentType, wsHref;
+ if (image) {
+ image.GetContent(wsValue);
+ image.GetContentType(wsContentType);
+ image.GetHref(wsHref);
+ }
+ SetImageEdit(wsContentType, wsHref, wsValue);
+ } break;
+ case XFA_ELEMENT_ExclGroup: {
+ CXFA_Node* pNextChild = m_pNode->GetNodeItem(
+ XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode);
+ while (pNextChild) {
+ CXFA_Node* pChild = pNextChild;
+ CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)pChild->GetWidgetData();
+ if (!pAcc) {
+ continue;
+ }
+ CXFA_Value defValue(NULL);
+ if (wsValue.IsEmpty() && (defValue = pAcc->GetDefaultValue())) {
+ defValue.GetChildValueContent(wsValue);
+ this->SetValue(wsValue, XFA_VALUEPICTURE_Raw);
+ pAcc->SetValue(wsValue, XFA_VALUEPICTURE_Raw);
+ } else {
+ CXFA_Node* pItems = pChild->GetChild(0, XFA_ELEMENT_Items);
+ if (!pItems) {
+ continue;
+ }
+ CFX_WideString itemText;
+ if (pItems->CountChildren(XFA_ELEMENT_UNKNOWN) > 1) {
+ itemText = pItems->GetChild(1, XFA_ELEMENT_UNKNOWN)->GetContent();
+ }
+ pAcc->SetValue(itemText, XFA_VALUEPICTURE_Raw);
+ }
+ pNextChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling,
+ XFA_OBJECTTYPE_ContainerNode);
+ }
+ } break;
+ case XFA_ELEMENT_ChoiceList:
+ ClearAllSelections();
+ default:
+ if (CXFA_Value defValue = GetDefaultValue()) {
+ defValue.GetChildValueContent(wsValue);
+ }
+ SetValue(wsValue, XFA_VALUEPICTURE_Raw);
+ break;
+ }
+}
+void CXFA_WidgetAcc::SetImageEdit(const CFX_WideStringC& wsContentType,
+ const CFX_WideStringC& wsHref,
+ const CFX_WideStringC& wsData) {
+ CXFA_Image image = GetFormValue().GetImage();
+ if (image) {
+ image.SetContentType(wsContentType);
+ image.SetHref(wsHref);
+ }
+ CFX_WideString wsFormatValue(wsData);
+ this->GetFormatDataValue(wsData, wsFormatValue);
+ m_pNode->SetContent(wsData, wsFormatValue, TRUE);
+ CXFA_Node* pBind = GetDatasets();
+ if (!pBind) {
+ image.SetTransferEncoding(XFA_ATTRIBUTEENUM_Base64);
+ return;
+ }
+ pBind->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType);
+ CXFA_Node* pHrefNode = pBind->GetNodeItem(XFA_NODEITEM_FirstChild);
+ if (pHrefNode) {
+ pHrefNode->SetCData(XFA_ATTRIBUTE_Value, wsHref);
+ } else {
+ IFDE_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
+ FXSYS_assert(pXMLNode && pXMLNode->GetType() == FDE_XMLNODE_Element);
+ ((IFDE_XMLElement*)pXMLNode)->SetString(FX_WSTRC(L"href"), wsHref);
+ }
+}
+
+CXFA_WidgetAcc* CXFA_WidgetAcc::GetExclGroup() {
+ CXFA_Node* pExcl = m_pNode->GetNodeItem(XFA_NODEITEM_Parent);
+ if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) {
+ return NULL;
+ }
+ return (CXFA_WidgetAcc*)pExcl->GetWidgetData();
+}
+CXFA_FFDocView* CXFA_WidgetAcc::GetDocView() {
+ return m_pDocView;
+}
+CXFA_FFDoc* CXFA_WidgetAcc::GetDoc() {
+ return (CXFA_FFDoc*)m_pDocView->GetDoc();
+}
+CXFA_FFApp* CXFA_WidgetAcc::GetApp() {
+ return GetDoc()->GetApp();
+}
+IXFA_AppProvider* CXFA_WidgetAcc::GetAppProvider() {
+ return GetApp()->GetAppProvider();
+}
+int32_t CXFA_WidgetAcc::ProcessEvent(int32_t iActivity,
+ CXFA_EventParam* pEventParam) {
+ if (this->GetClassID() == XFA_ELEMENT_Draw) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ int32_t iRet = XFA_EVENTERROR_NotExist;
+ CXFA_NodeArray eventArray;
+ int32_t iCounts =
+ GetEventByActivity(iActivity, eventArray, pEventParam->m_bIsFormReady);
+ for (int32_t i = 0; i < iCounts; i++) {
+ CXFA_Event event(eventArray[i]);
+ int32_t result = ProcessEvent(event, pEventParam);
+ if (i == 0) {
+ iRet = result;
+ } else if (result == XFA_EVENTERROR_Sucess) {
+ iRet = result;
+ }
+ }
+ return iRet;
+}
+int32_t CXFA_WidgetAcc::ProcessEvent(CXFA_Event& event,
+ CXFA_EventParam* pEventParam) {
+ if (!event) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ switch (event.GetEventType()) {
+ case XFA_ELEMENT_Execute:
+ break;
+ case XFA_ELEMENT_Script: {
+ CXFA_Script script = event.GetScript();
+ return ExecuteScript(script, pEventParam);
+ } break;
+ case XFA_ELEMENT_SignData:
+ break;
+ case XFA_ELEMENT_Submit: {
+ CXFA_Submit submit = event.GetSubmit();
+ return GetDoc()->GetDocProvider()->SubmitData(GetDoc(), submit);
+ }
+ default:
+ break;
+ }
+ return XFA_EVENTERROR_NotExist;
+}
+int32_t CXFA_WidgetAcc::ProcessCalculate() {
+ if (this->GetClassID() == XFA_ELEMENT_Draw) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ CXFA_Calculate calc = this->GetCalculate();
+ if (!calc) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return XFA_EVENTERROR_Disabled;
+ }
+ CXFA_EventParam EventParam;
+ EventParam.m_eType = XFA_EVENT_Calculate;
+ CXFA_Script script = calc.GetScript();
+ int32_t iRet = ExecuteScript(script, &EventParam);
+ if (iRet == XFA_EVENTERROR_Sucess) {
+ if (GetRawValue() != EventParam.m_wsResult) {
+ FX_BOOL bNotify = GetDoc()->GetDocType() == XFA_DOCTYPE_Static;
+ SetValue(EventParam.m_wsResult, XFA_VALUEPICTURE_Raw);
+ UpdateUIDisplay();
+ if (bNotify) {
+ NotifyEvent(XFA_WIDGETEVENT_PostContentChanged, NULL, NULL, NULL);
+ }
+ iRet = XFA_EVENTERROR_Sucess;
+ }
+ }
+ return iRet;
+}
+void CXFA_WidgetAcc::ProcessScriptTestValidate(CXFA_Validate validate,
+ int32_t iRet,
+ FXJSE_HVALUE pRetValue,
+ FX_BOOL bVersionFlag) {
+ if (iRet == XFA_EVENTERROR_Sucess && pRetValue) {
+ if (FXJSE_Value_IsBoolean(pRetValue) && !FXJSE_Value_ToBoolean(pRetValue)) {
+ IXFA_AppProvider* pAppProvider = GetAppProvider();
+ if (!pAppProvider) {
+ return;
+ }
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
+ CFX_WideString wsScriptMsg;
+ validate.GetScriptMessageText(wsScriptMsg);
+ int32_t eScriptTest = validate.GetScriptTest();
+ if (eScriptTest == XFA_ATTRIBUTEENUM_Warning) {
+ if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return;
+ }
+ if (wsScriptMsg.IsEmpty()) {
+ GetValidateMessage(pAppProvider, wsScriptMsg, FALSE, bVersionFlag);
+ }
+ if (bVersionFlag) {
+ pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_OK);
+ return;
+ }
+ if (pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_YesNo) == XFA_IDYes) {
+ this->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
+ }
+ } else {
+ if (wsScriptMsg.IsEmpty()) {
+ GetValidateMessage(pAppProvider, wsScriptMsg, TRUE, bVersionFlag);
+ }
+ pAppProvider->MsgBox(wsScriptMsg, wsTitle, XFA_MBICON_Error, XFA_MB_OK);
+ }
+ }
+ }
+}
+int32_t CXFA_WidgetAcc::ProcessFormatTestValidate(CXFA_Validate validate,
+ FX_BOOL bVersionFlag) {
+ CFX_WideString wsRawValue = GetRawValue();
+ if (!wsRawValue.IsEmpty()) {
+ CFX_WideString wsPicture;
+ validate.GetPicture(wsPicture);
+ if (wsPicture.IsEmpty()) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ IFX_Locale* pLocale = GetLocal();
+ if (!pLocale) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ CXFA_LocaleValue lcValue = XFA_GetLocaleValue(this);
+ if (!lcValue.ValidateValue(lcValue.GetValue(), wsPicture, pLocale)) {
+ IXFA_AppProvider* pAppProvider = GetAppProvider();
+ if (!pAppProvider) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ CFX_WideString wsFormatMsg;
+ validate.GetFormatMessageText(wsFormatMsg);
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
+ int32_t eFormatTest = validate.GetFormatTest();
+ if (eFormatTest == XFA_ATTRIBUTEENUM_Error) {
+ if (wsFormatMsg.IsEmpty()) {
+ GetValidateMessage(pAppProvider, wsFormatMsg, TRUE, bVersionFlag);
+ }
+ pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Error, XFA_MB_OK);
+ return XFA_EVENTERROR_Sucess;
+ }
+ if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (wsFormatMsg.IsEmpty()) {
+ GetValidateMessage(pAppProvider, wsFormatMsg, FALSE, bVersionFlag);
+ }
+ if (bVersionFlag) {
+ pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_OK);
+ return XFA_EVENTERROR_Sucess;
+ }
+ if (pAppProvider->MsgBox(wsFormatMsg, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_YesNo) == XFA_IDYes) {
+ this->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
+ }
+ return XFA_EVENTERROR_Sucess;
+ }
+ }
+ return XFA_EVENTERROR_NotExist;
+}
+int32_t CXFA_WidgetAcc::ProcessNullTestValidate(CXFA_Validate validate,
+ int32_t iFlags,
+ FX_BOOL bVersionFlag) {
+ CFX_WideString wsValue;
+ this->GetValue(wsValue, XFA_VALUEPICTURE_Raw);
+ if (!wsValue.IsEmpty()) {
+ return XFA_EVENTERROR_Sucess;
+ }
+ if (this->m_bIsNull && (this->m_bPreNull == this->m_bIsNull)) {
+ return XFA_EVENTERROR_Sucess;
+ }
+ int32_t eNullTest = validate.GetNullTest();
+ CFX_WideString wsNullMsg;
+ validate.GetNullMessageText(wsNullMsg);
+ if (iFlags & 0x01) {
+ int32_t iRet = XFA_EVENTERROR_Sucess;
+ if (eNullTest != XFA_ATTRIBUTEENUM_Disabled) {
+ iRet = XFA_EVENTERROR_Error;
+ }
+ if (!wsNullMsg.IsEmpty()) {
+ if (eNullTest != XFA_ATTRIBUTEENUM_Disabled) {
+ m_pDocView->m_arrNullTestMsg.Add(wsNullMsg);
+ return XFA_EVENTERROR_Error;
+ }
+ return XFA_EVENTERROR_Sucess;
+ }
+ return iRet;
+ }
+ if (wsNullMsg.IsEmpty() && bVersionFlag &&
+ eNullTest != XFA_ATTRIBUTEENUM_Disabled) {
+ return XFA_EVENTERROR_Error;
+ }
+ IXFA_AppProvider* pAppProvider = GetAppProvider();
+ if (!pAppProvider) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ CFX_WideString wsCaptionName;
+ CFX_WideString wsTitle;
+ pAppProvider->LoadString(XFA_IDS_AppName, wsTitle);
+ switch (eNullTest) {
+ case XFA_ATTRIBUTEENUM_Error: {
+ if (wsNullMsg.IsEmpty()) {
+ GetValidateCaptionName(wsCaptionName, bVersionFlag);
+ CFX_WideString wsError;
+ pAppProvider->LoadString(XFA_IDS_ValidateNullError, wsError);
+ wsNullMsg.Format(wsError, (const FX_WCHAR*)wsCaptionName);
+ }
+ pAppProvider->MsgBox(wsNullMsg, wsTitle, XFA_MBICON_Status, XFA_MB_OK);
+ return XFA_EVENTERROR_Error;
+ }
+ case XFA_ATTRIBUTEENUM_Warning: {
+ if (this->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return TRUE;
+ }
+ if (wsNullMsg.IsEmpty()) {
+ GetValidateCaptionName(wsCaptionName, bVersionFlag);
+ CFX_WideString wsWarning;
+ pAppProvider->LoadString(XFA_IDS_ValidateNullWarning, wsWarning);
+ wsNullMsg.Format(wsWarning, (const FX_WCHAR*)wsCaptionName,
+ (const FX_WCHAR*)wsCaptionName);
+ }
+ if (pAppProvider->MsgBox(wsNullMsg, wsTitle, XFA_MBICON_Warning,
+ XFA_MB_YesNo) == XFA_IDYes) {
+ this->GetNode()->SetFlag(XFA_NODEFLAG_UserInteractive, TRUE, FALSE);
+ }
+ return XFA_EVENTERROR_Error;
+ }
+ case XFA_ATTRIBUTEENUM_Disabled:
+ default:
+ break;
+ }
+ return XFA_EVENTERROR_Sucess;
+}
+void CXFA_WidgetAcc::GetValidateCaptionName(CFX_WideString& wsCaptionName,
+ FX_BOOL bVersionFlag) {
+ if (!bVersionFlag) {
+ CXFA_Caption caption = GetCaption();
+ if (caption) {
+ CXFA_Value capValue = caption.GetValue();
+ if (capValue) {
+ CXFA_Text capText = capValue.GetText();
+ if (capText) {
+ capText.GetContent(wsCaptionName);
+ }
+ }
+ }
+ }
+ if (wsCaptionName.IsEmpty()) {
+ GetName(wsCaptionName);
+ }
+}
+void CXFA_WidgetAcc::GetValidateMessage(IXFA_AppProvider* pAppProvider,
+ CFX_WideString& wsMessage,
+ FX_BOOL bError,
+ FX_BOOL bVersionFlag) {
+ CFX_WideString wsCaptionName;
+ GetValidateCaptionName(wsCaptionName, bVersionFlag);
+ CFX_WideString wsError;
+ if (bVersionFlag) {
+ pAppProvider->LoadString(XFA_IDS_ValidateFailed, wsError);
+ wsMessage.Format(wsError, (const FX_WCHAR*)wsCaptionName);
+ return;
+ }
+ if (bError) {
+ pAppProvider->LoadString(XFA_IDS_ValidateError, wsError);
+ wsMessage.Format(wsError, (const FX_WCHAR*)wsCaptionName);
+ return;
+ }
+ CFX_WideString wsWarning;
+ pAppProvider->LoadString(XFA_IDS_ValidateWarning, wsWarning);
+ wsMessage.Format(wsWarning, (const FX_WCHAR*)wsCaptionName,
+ (const FX_WCHAR*)wsCaptionName);
+}
+int32_t CXFA_WidgetAcc::ProcessValidate(int32_t iFlags) {
+ if (this->GetClassID() == XFA_ELEMENT_Draw) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ CXFA_Validate validate = this->GetValidate();
+ if (!validate) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ FX_BOOL bInitDoc = ((CXFA_Node*)validate)->HasFlag(XFA_NODEFLAG_NeedsInitApp);
+ FX_BOOL bStatus =
+ m_pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End;
+ int32_t iFormat = 0;
+ FXJSE_HVALUE pRetValue = NULL;
+ int32_t iRet = XFA_EVENTERROR_NotExist;
+ CXFA_Script script = validate.GetScript();
+ if (script) {
+ CXFA_EventParam eParam;
+ eParam.m_eType = XFA_EVENT_Validate;
+ eParam.m_pTarget = this;
+ iRet = ExecuteScript(
+ script, &eParam,
+ ((bInitDoc || bStatus) && this->GetRawValue().IsEmpty()) ? NULL
+ : &pRetValue);
+ }
+ XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode();
+ FX_BOOL bVersionFlag = FALSE;
+ if (version < XFA_VERSION_208) {
+ bVersionFlag = TRUE;
+ }
+ if (bInitDoc) {
+ ((CXFA_Node*)validate)->SetFlag(XFA_NODEFLAG_NeedsInitApp, FALSE, FALSE);
+ } else {
+ iFormat = ProcessFormatTestValidate(validate, bVersionFlag);
+ if (!bVersionFlag) {
+ bVersionFlag = GetDoc()->GetXFADoc()->HasFlag(XFA_DOCFLAG_Scripting);
+ }
+ iRet |= ProcessNullTestValidate(validate, iFlags, bVersionFlag);
+ }
+ if (iFormat != XFA_EVENTERROR_Sucess) {
+ ProcessScriptTestValidate(validate, iRet, pRetValue, bVersionFlag);
+ }
+ if (pRetValue) {
+ FXJSE_Value_Release(pRetValue);
+ }
+ return iRet | iFormat;
+}
+int32_t CXFA_WidgetAcc::ExecuteScript(CXFA_Script script,
+ CXFA_EventParam* pEventParam,
+ FXJSE_HVALUE* pRetValue) {
+ static const uint32_t MAX_RECURSION_DEPTH = 2;
+ if (m_nRecursionDepth > MAX_RECURSION_DEPTH)
+ return XFA_EVENTERROR_Sucess;
+ FXSYS_assert(pEventParam);
+ if (!script) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (script.GetRunAt() == XFA_ATTRIBUTEENUM_Server) {
+ return XFA_EVENTERROR_Disabled;
+ }
+ CFX_WideString wsExpression;
+ script.GetExpression(wsExpression);
+ if (wsExpression.IsEmpty()) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ XFA_SCRIPTTYPE eScriptType = script.GetContentType();
+ if (eScriptType == XFA_SCRIPTTYPE_Unkown) {
+ return XFA_EVENTERROR_Sucess;
+ }
+ CXFA_FFDoc* pDoc = GetDoc();
+ IXFA_ScriptContext* pContext = pDoc->GetXFADoc()->GetScriptContext();
+ pContext->SetEventParam(pEventParam);
+ pContext->SetRunAtType((XFA_ATTRIBUTEENUM)script.GetRunAt());
+ CXFA_NodeArray refNodes;
+ if (pEventParam->m_eType == XFA_EVENT_InitCalculate ||
+ pEventParam->m_eType == XFA_EVENT_Calculate) {
+ pContext->SetNodesOfRunScript(&refNodes);
+ }
+ FXJSE_HVALUE hRetValue = FXJSE_Value_Create(pContext->GetRuntime());
+ ++m_nRecursionDepth;
+ FX_BOOL bRet = pContext->RunScript((XFA_SCRIPTLANGTYPE)eScriptType,
+ wsExpression, hRetValue, m_pNode);
+ --m_nRecursionDepth;
+ int32_t iRet = XFA_EVENTERROR_Error;
+ if (bRet) {
+ iRet = XFA_EVENTERROR_Sucess;
+ if (pEventParam->m_eType == XFA_EVENT_Calculate ||
+ pEventParam->m_eType == XFA_EVENT_InitCalculate) {
+ if (!FXJSE_Value_IsUndefined(hRetValue)) {
+ if (!FXJSE_Value_IsNull(hRetValue)) {
+ CFX_ByteString bsString;
+ FXJSE_Value_ToUTF8String(hRetValue, bsString);
+ pEventParam->m_wsResult =
+ CFX_WideString::FromUTF8(bsString, bsString.GetLength());
+ }
+ iRet = XFA_EVENTERROR_Sucess;
+ } else {
+ iRet = XFA_EVENTERROR_Error;
+ }
+ if (pEventParam->m_eType == XFA_EVENT_InitCalculate) {
+ if ((iRet == XFA_EVENTERROR_Sucess) &&
+ (GetRawValue() != pEventParam->m_wsResult)) {
+ SetValue(pEventParam->m_wsResult, XFA_VALUEPICTURE_Raw);
+ m_pDocView->AddValidateWidget(this);
+ }
+ }
+ int32_t iRefs = refNodes.GetSize();
+ for (int32_t r = 0; r < iRefs; r++) {
+ CXFA_WidgetAcc* pRefAcc = (CXFA_WidgetAcc*)refNodes[r]->GetWidgetData();
+ if (pRefAcc && pRefAcc == this) {
+ continue;
+ }
+ CXFA_Node* pRefNode = refNodes[r];
+ CXFA_CalcData* pGlobalData =
+ (CXFA_CalcData*)pRefNode->GetUserData(XFA_CalcData);
+ if (!pGlobalData) {
+ pGlobalData = new CXFA_CalcData;
+ pRefNode->SetUserData(XFA_CalcData, pGlobalData,
+ &gs_XFADeleteCalcData);
+ }
+ if (pGlobalData->m_Globals.Find(this) < 0) {
+ pGlobalData->m_Globals.Add(this);
+ }
+ }
+ }
+ }
+ if (pRetValue) {
+ *pRetValue = hRetValue;
+ } else {
+ FXJSE_Value_Release(hRetValue);
+ }
+ pContext->SetNodesOfRunScript(NULL);
+ return iRet;
+}
+CXFA_FFWidget* CXFA_WidgetAcc::GetNextWidget(CXFA_FFWidget* pWidget) {
+ CXFA_LayoutItem* pLayout = nullptr;
+ if (pWidget) {
+ pLayout = pWidget->GetNext();
+ } else {
+ pLayout = m_pDocView->GetXFALayout()->GetLayoutItem(m_pNode);
+ }
+ return static_cast<CXFA_FFWidget*>(pLayout);
+}
+void CXFA_WidgetAcc::UpdateUIDisplay(CXFA_FFWidget* pExcept) {
+ CXFA_FFWidget* pWidget = NULL;
+ while ((pWidget = this->GetNextWidget(pWidget)) != NULL) {
+ if (pWidget == pExcept || !pWidget->IsLoaded() ||
+ (GetUIType() != XFA_ELEMENT_CheckButton && pWidget->IsFocused())) {
+ continue;
+ }
+ pWidget->UpdateFWLData();
+ pWidget->AddInvalidateRect();
+ }
+}
+void CXFA_WidgetAcc::NotifyEvent(FX_DWORD dwEvent,
+ CXFA_FFWidget* pWidget,
+ void* pParam,
+ void* pAdditional) {
+ IXFA_DocProvider* pDocProvider = GetDoc()->GetDocProvider();
+ if (pWidget) {
+ pDocProvider->WidgetEvent(pWidget, this, dwEvent, pParam, pAdditional);
+ } else {
+ pWidget = GetNextWidget(pWidget);
+ if (pWidget == NULL) {
+ pDocProvider->WidgetEvent(NULL, this, dwEvent, pParam, pAdditional);
+ return;
+ }
+ while (pWidget) {
+ pDocProvider->WidgetEvent(pWidget, this, dwEvent, pParam, pAdditional);
+ pWidget = GetNextWidget(pWidget);
+ }
+ }
+}
+void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) {
+ CXFA_Caption caption = this->GetCaption();
+ if (!caption.IsExistInXML() ||
+ caption.GetPresence() != XFA_ATTRIBUTEENUM_Visible) {
+ return;
+ }
+ LoadCaption();
+ XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType();
+ int32_t iCapPlacement = caption.GetPlacementType();
+ FX_FLOAT fCapReserve = caption.GetReserve();
+ FX_BOOL bVert = iCapPlacement == XFA_ATTRIBUTEENUM_Top ||
+ iCapPlacement == XFA_ATTRIBUTEENUM_Bottom;
+ FX_BOOL bReserveExit = fCapReserve > 0.01;
+ CXFA_TextLayout* pCapTextLayout =
+ ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout;
+ if (pCapTextLayout) {
+ if (!bVert && eUIType != XFA_ELEMENT_Button) {
+ szCap.x = fCapReserve;
+ }
+ CFX_SizeF minSize;
+ minSize.Set(0, 0);
+ pCapTextLayout->CalcSize(minSize, szCap, szCap);
+ if (bReserveExit) {
+ bVert ? szCap.y = fCapReserve : szCap.x = fCapReserve;
+ }
+ } else {
+ FX_FLOAT fFontSize = 10.0f;
+ if (CXFA_Font font = caption.GetFont()) {
+ fFontSize = font.GetFontSize();
+ } else if (CXFA_Font widgetfont = GetFont()) {
+ fFontSize = widgetfont.GetFontSize();
+ }
+ if (bVert) {
+ szCap.y = fCapReserve > 0 ? fCapReserve : fFontSize;
+ } else {
+ szCap.x = fCapReserve > 0 ? fCapReserve : 0;
+ szCap.y = fFontSize;
+ }
+ }
+ if (CXFA_Margin mgCap = caption.GetMargin()) {
+ FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset;
+ mgCap.GetLeftInset(fLeftInset);
+ mgCap.GetTopInset(fTopInset);
+ mgCap.GetRightInset(fRightInset);
+ mgCap.GetBottomInset(fBottomInset);
+ if (bReserveExit) {
+ bVert ? (szCap.x += fLeftInset + fRightInset)
+ : (szCap.y += fTopInset + fBottomInset);
+ } else {
+ szCap.x += fLeftInset + fRightInset;
+ szCap.y += fTopInset + fBottomInset;
+ }
+ }
+}
+FX_BOOL CXFA_WidgetAcc::CalculateFieldAutoSize(CFX_SizeF& size) {
+ CFX_SizeF szCap;
+ szCap.Set(0, 0);
+ CalcCaptionSize(szCap);
+ CFX_RectF rtUIMargin;
+ GetUIMargin(rtUIMargin);
+ size.x += rtUIMargin.left + rtUIMargin.width;
+ size.y += rtUIMargin.top + rtUIMargin.height;
+ if (szCap.x > 0 && szCap.y > 0) {
+ int32_t iCapPlacement = this->GetCaption().GetPlacementType();
+ switch (iCapPlacement) {
+ case XFA_ATTRIBUTEENUM_Left:
+ case XFA_ATTRIBUTEENUM_Right:
+ case XFA_ATTRIBUTEENUM_Inline: {
+ size.x += szCap.x;
+ size.y = std::max(size.y, szCap.y);
+ } break;
+ case XFA_ATTRIBUTEENUM_Top:
+ case XFA_ATTRIBUTEENUM_Bottom: {
+ size.y += szCap.y;
+ size.x = std::max(size.x, szCap.x);
+ }
+ default:
+ break;
+ }
+ }
+ return CalculateWidgetAutoSize(size);
+}
+FX_BOOL CXFA_WidgetAcc::CalculateWidgetAutoSize(CFX_SizeF& size) {
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset;
+ mgWidget.GetLeftInset(fLeftInset);
+ mgWidget.GetTopInset(fTopInset);
+ mgWidget.GetRightInset(fRightInset);
+ mgWidget.GetBottomInset(fBottomInset);
+ size.x += fLeftInset + fRightInset;
+ size.y += fTopInset + fBottomInset;
+ }
+ CXFA_Para para = this->GetPara();
+ if (para.IsExistInXML()) {
+ size.x += para.GetMarginLeft();
+ size.x += para.GetTextIndent();
+ }
+ FX_FLOAT fVal = 0, fMin = 0, fMax = 0;
+ if (this->GetWidth(fVal)) {
+ size.x = fVal;
+ } else {
+ if (this->GetMinWidth(fMin)) {
+ size.x = std::max(size.x, fMin);
+ }
+ if (this->GetMaxWidth(fMax) && fMax > 0) {
+ size.x = std::min(size.x, fMax);
+ }
+ }
+ fVal = 0, fMin = 0, fMax = 0;
+ if (this->GetHeight(fVal)) {
+ size.y = fVal;
+ } else {
+ if (this->GetMinHeight(fMin)) {
+ size.y = std::max(size.y, fMin);
+ }
+ if (this->GetMaxHeight(fMax) && fMax > 0) {
+ size.y = std::min(size.y, fMax);
+ }
+ }
+ return TRUE;
+}
+void CXFA_WidgetAcc::CalculateTextContentSize(CFX_SizeF& size) {
+ FX_FLOAT fFontSize = GetFontSize();
+ CFX_WideString wsText;
+ this->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ if (wsText.IsEmpty()) {
+ size.y += fFontSize;
+ return;
+ }
+ FX_WCHAR wcEnter = '\n';
+ FX_WCHAR wsLast = wsText.GetAt(wsText.GetLength() - 1);
+ if (wsLast == wcEnter) {
+ wsText = wsText + wcEnter;
+ }
+ if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut) {
+ ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut = IFDE_TextOut::Create();
+ IFDE_TextOut* pTextOut = ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut;
+ pTextOut->SetFont(GetFDEFont());
+ pTextOut->SetFontSize(fFontSize);
+ pTextOut->SetLineBreakTolerance(fFontSize * 0.2f);
+ pTextOut->SetLineSpace(GetLineHeight());
+ FX_DWORD dwStyles = FDE_TTOSTYLE_LastLineHeight;
+ if (GetUIType() == XFA_ELEMENT_TextEdit && IsMultiLine()) {
+ dwStyles |= FDE_TTOSTYLE_LineWrap;
+ }
+ pTextOut->SetStyles(dwStyles);
+ }
+ ((CXFA_FieldLayoutData*)m_pLayoutData)
+ ->m_pTextOut->CalcLogicSize(wsText, wsText.GetLength(), size);
+}
+FX_BOOL CXFA_WidgetAcc::CalculateTextEditAutoSize(CFX_SizeF& size) {
+ if (size.x > 0) {
+ CFX_SizeF szOrz = size;
+ CFX_SizeF szCap;
+ szCap.Set(0, 0);
+ CalcCaptionSize(szCap);
+ FX_BOOL bCapExit = szCap.x > 0.01 && szCap.y > 0.01;
+ int32_t iCapPlacement = XFA_ATTRIBUTEENUM_Unknown;
+ if (bCapExit) {
+ iCapPlacement = this->GetCaption().GetPlacementType();
+ switch (iCapPlacement) {
+ case XFA_ATTRIBUTEENUM_Left:
+ case XFA_ATTRIBUTEENUM_Right:
+ case XFA_ATTRIBUTEENUM_Inline: {
+ size.x -= szCap.x;
+ }
+ default:
+ break;
+ }
+ }
+ CFX_RectF rtUIMargin;
+ GetUIMargin(rtUIMargin);
+ size.x -= rtUIMargin.left + rtUIMargin.width;
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ FX_FLOAT fLeftInset, fRightInset;
+ mgWidget.GetLeftInset(fLeftInset);
+ mgWidget.GetRightInset(fRightInset);
+ size.x -= fLeftInset + fRightInset;
+ }
+ CalculateTextContentSize(size);
+ size.y += rtUIMargin.top + rtUIMargin.height;
+ if (bCapExit) {
+ switch (iCapPlacement) {
+ case XFA_ATTRIBUTEENUM_Left:
+ case XFA_ATTRIBUTEENUM_Right:
+ case XFA_ATTRIBUTEENUM_Inline: {
+ size.y = std::max(size.y, szCap.y);
+ } break;
+ case XFA_ATTRIBUTEENUM_Top:
+ case XFA_ATTRIBUTEENUM_Bottom: {
+ size.y += szCap.y;
+ }
+ default:
+ break;
+ }
+ }
+ size.x = szOrz.x;
+ return CalculateWidgetAutoSize(size);
+ }
+ CalculateTextContentSize(size);
+ return CalculateFieldAutoSize(size);
+}
+FX_BOOL CXFA_WidgetAcc::CalculateCheckButtonAutoSize(CFX_SizeF& size) {
+ FX_FLOAT fCheckSize = this->GetCheckButtonSize();
+ size.x = size.y = fCheckSize;
+ return CalculateFieldAutoSize(size);
+}
+FX_BOOL CXFA_WidgetAcc::CalculatePushButtonAutoSize(CFX_SizeF& size) {
+ CalcCaptionSize(size);
+ return CalculateWidgetAutoSize(size);
+}
+FX_BOOL CXFA_WidgetAcc::CalculateImageAutoSize(CFX_SizeF& size) {
+ if (!GetImageImage()) {
+ LoadImageImage();
+ }
+ size.Set(0, 0);
+ if (CFX_DIBitmap* pBitmap = GetImageImage()) {
+ CFX_RectF rtImage, rtFit;
+ rtImage.Set(0, 0, 0, 0);
+ rtFit.Set(0, 0, 0, 0);
+ int32_t iImageXDpi = 0;
+ int32_t iImageYDpi = 0;
+ GetImageDpi(iImageXDpi, iImageYDpi);
+ rtImage.width =
+ XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetWidth(), (FX_FLOAT)iImageXDpi);
+ rtImage.height =
+ XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetHeight(), (FX_FLOAT)iImageYDpi);
+ if (GetWidth(rtFit.width)) {
+ GetWidthWithoutMargin(rtFit.width);
+ } else {
+ rtFit.width = rtImage.width;
+ }
+ if (GetHeight(rtFit.height)) {
+ GetHeightWithoutMargin(rtFit.height);
+ } else {
+ rtFit.height = rtImage.height;
+ }
+ size.x = rtFit.width;
+ size.y = rtFit.height;
+ }
+ return CalculateWidgetAutoSize(size);
+}
+FX_BOOL CXFA_WidgetAcc::CalculateImageEditAutoSize(CFX_SizeF& size) {
+ if (!GetImageEditImage()) {
+ LoadImageEditImage();
+ }
+ size.Set(0, 0);
+ if (CFX_DIBitmap* pBitmap = GetImageEditImage()) {
+ CFX_RectF rtImage, rtFit;
+ rtImage.Set(0, 0, 0, 0);
+ rtFit.Set(0, 0, 0, 0);
+ int32_t iImageXDpi = 0;
+ int32_t iImageYDpi = 0;
+ GetImageEditDpi(iImageXDpi, iImageYDpi);
+ rtImage.width =
+ XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetWidth(), (FX_FLOAT)iImageXDpi);
+ rtImage.height =
+ XFA_UnitPx2Pt((FX_FLOAT)pBitmap->GetHeight(), (FX_FLOAT)iImageYDpi);
+ if (GetWidth(rtFit.width)) {
+ GetWidthWithoutMargin(rtFit.width);
+ } else {
+ rtFit.width = rtImage.width;
+ }
+ if (GetHeight(rtFit.height)) {
+ GetHeightWithoutMargin(rtFit.height);
+ } else {
+ rtFit.height = rtImage.height;
+ }
+ size.x = rtFit.width;
+ size.y = rtFit.height;
+ }
+ return CalculateFieldAutoSize(size);
+}
+FX_BOOL CXFA_WidgetAcc::LoadImageImage() {
+ InitLayoutData();
+ return ((CXFA_ImageLayoutData*)m_pLayoutData)->LoadImageData(this);
+}
+FX_BOOL CXFA_WidgetAcc::LoadImageEditImage() {
+ InitLayoutData();
+ return ((CXFA_ImageEditData*)m_pLayoutData)->LoadImageData(this);
+}
+void CXFA_WidgetAcc::GetImageDpi(int32_t& iImageXDpi, int32_t& iImageYDpi) {
+ iImageXDpi = ((CXFA_ImageLayoutData*)m_pLayoutData)->m_iImageXDpi;
+ iImageYDpi = ((CXFA_ImageLayoutData*)m_pLayoutData)->m_iImageYDpi;
+}
+void CXFA_WidgetAcc::GetImageEditDpi(int32_t& iImageXDpi, int32_t& iImageYDpi) {
+ iImageXDpi = ((CXFA_ImageEditData*)m_pLayoutData)->m_iImageXDpi;
+ iImageYDpi = ((CXFA_ImageEditData*)m_pLayoutData)->m_iImageYDpi;
+}
+FX_BOOL CXFA_WidgetAcc::CalculateTextAutoSize(CFX_SizeF& size) {
+ LoadText();
+ CXFA_TextLayout* pTextLayout =
+ ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout;
+ if (pTextLayout) {
+ size.x = pTextLayout->StartLayout(size.x);
+ size.y = pTextLayout->GetLayoutHeight();
+ }
+ return CalculateWidgetAutoSize(size);
+}
+void CXFA_WidgetAcc::LoadText() {
+ InitLayoutData();
+ ((CXFA_TextLayoutData*)m_pLayoutData)->LoadText(this);
+}
+FX_FLOAT CXFA_WidgetAcc::CalculateWidgetAutoWidth(FX_FLOAT fWidthCalc) {
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ FX_FLOAT fLeftInset, fRightInset;
+ mgWidget.GetLeftInset(fLeftInset);
+ mgWidget.GetRightInset(fRightInset);
+ fWidthCalc += fLeftInset + fRightInset;
+ }
+ FX_FLOAT fMin = 0, fMax = 0;
+ if (this->GetMinWidth(fMin)) {
+ fWidthCalc = std::max(fWidthCalc, fMin);
+ }
+ if (this->GetMaxWidth(fMax) && fMax > 0) {
+ fWidthCalc = std::min(fWidthCalc, fMax);
+ }
+ return fWidthCalc;
+}
+FX_FLOAT CXFA_WidgetAcc::GetWidthWithoutMargin(FX_FLOAT fWidthCalc) {
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ FX_FLOAT fLeftInset, fRightInset;
+ mgWidget.GetLeftInset(fLeftInset);
+ mgWidget.GetRightInset(fRightInset);
+ fWidthCalc -= fLeftInset + fRightInset;
+ }
+ return fWidthCalc;
+}
+FX_FLOAT CXFA_WidgetAcc::CalculateWidgetAutoHeight(FX_FLOAT fHeightCalc) {
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ FX_FLOAT fTopInset, fBottomInset;
+ mgWidget.GetTopInset(fTopInset);
+ mgWidget.GetBottomInset(fBottomInset);
+ fHeightCalc += fTopInset + fBottomInset;
+ }
+ FX_FLOAT fMin = 0, fMax = 0;
+ if (this->GetMinHeight(fMin)) {
+ fHeightCalc = std::max(fHeightCalc, fMin);
+ }
+ if (this->GetMaxHeight(fMax) && fMax > 0) {
+ fHeightCalc = std::min(fHeightCalc, fMax);
+ }
+ return fHeightCalc;
+}
+FX_FLOAT CXFA_WidgetAcc::GetHeightWithoutMargin(FX_FLOAT fHeightCalc) {
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ FX_FLOAT fTopInset, fBottomInset;
+ mgWidget.GetTopInset(fTopInset);
+ mgWidget.GetBottomInset(fBottomInset);
+ fHeightCalc -= fTopInset + fBottomInset;
+ }
+ return fHeightCalc;
+}
+void CXFA_WidgetAcc::StartWidgetLayout(FX_FLOAT& fCalcWidth,
+ FX_FLOAT& fCalcHeight) {
+ InitLayoutData();
+ XFA_ELEMENT eUIType = GetUIType();
+ if (eUIType == XFA_ELEMENT_Text) {
+ m_pLayoutData->m_fWidgetHeight = -1;
+ GetHeight(m_pLayoutData->m_fWidgetHeight);
+ StartTextLayout(fCalcWidth, fCalcHeight);
+ return;
+ }
+ if (fCalcWidth > 0 && fCalcHeight > 0) {
+ return;
+ }
+ m_pLayoutData->m_fWidgetHeight = -1;
+ FX_FLOAT fWidth = 0;
+ if (fCalcWidth > 0 && fCalcHeight < 0) {
+ if (!GetHeight(fCalcHeight)) {
+ CalculateAccWidthAndHeight(eUIType, fCalcWidth, fCalcHeight);
+ }
+ m_pLayoutData->m_fWidgetHeight = fCalcHeight;
+ return;
+ }
+ if (fCalcWidth < 0 && fCalcHeight < 0) {
+ if (!GetWidth(fWidth) || !GetHeight(fCalcHeight)) {
+ CalculateAccWidthAndHeight(eUIType, fWidth, fCalcHeight);
+ }
+ fCalcWidth = fWidth;
+ }
+ m_pLayoutData->m_fWidgetHeight = fCalcHeight;
+}
+void CXFA_WidgetAcc::CalculateAccWidthAndHeight(XFA_ELEMENT eUIType,
+ FX_FLOAT& fWidth,
+ FX_FLOAT& fCalcHeight) {
+ CFX_SizeF sz;
+ sz.Set(fWidth, m_pLayoutData->m_fWidgetHeight);
+ switch (eUIType) {
+ case XFA_ELEMENT_Barcode:
+ case XFA_ELEMENT_ChoiceList:
+ case XFA_ELEMENT_Signature:
+ CalculateFieldAutoSize(sz);
+ break;
+ case XFA_ELEMENT_ImageEdit:
+ CalculateImageEditAutoSize(sz);
+ break;
+ case XFA_ELEMENT_Button:
+ CalculatePushButtonAutoSize(sz);
+ break;
+ case XFA_ELEMENT_CheckButton:
+ CalculateCheckButtonAutoSize(sz);
+ break;
+ case XFA_ELEMENT_DateTimeEdit:
+ case XFA_ELEMENT_NumericEdit:
+ case XFA_ELEMENT_PasswordEdit:
+ case XFA_ELEMENT_TextEdit:
+ CalculateTextEditAutoSize(sz);
+ break;
+ case XFA_ELEMENT_Image:
+ CalculateImageAutoSize(sz);
+ break;
+ case XFA_ELEMENT_Arc:
+ case XFA_ELEMENT_Line:
+ case XFA_ELEMENT_Rectangle:
+ case XFA_ELEMENT_Subform:
+ case XFA_ELEMENT_ExclGroup:
+ CalculateWidgetAutoSize(sz);
+ break;
+ default:
+ break;
+ }
+ fWidth = sz.x;
+ m_pLayoutData->m_fWidgetHeight = sz.y;
+ fCalcHeight = sz.y;
+}
+FX_BOOL CXFA_WidgetAcc::FindSplitPos(int32_t iBlockIndex,
+ FX_FLOAT& fCalcHeight) {
+ XFA_ELEMENT eUIType = (XFA_ELEMENT)GetUIType();
+ if (eUIType == XFA_ELEMENT_Subform) {
+ return FALSE;
+ }
+ if (eUIType != XFA_ELEMENT_Text && eUIType != XFA_ELEMENT_TextEdit &&
+ eUIType != XFA_ELEMENT_NumericEdit &&
+ eUIType != XFA_ELEMENT_PasswordEdit) {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ FX_FLOAT fTopInset = 0;
+ FX_FLOAT fBottomInset = 0;
+ if (iBlockIndex == 0) {
+ CXFA_Margin mgWidget = this->GetMargin();
+ if (mgWidget.IsExistInXML()) {
+ mgWidget.GetTopInset(fTopInset);
+ mgWidget.GetBottomInset(fBottomInset);
+ }
+ CFX_RectF rtUIMargin;
+ this->GetUIMargin(rtUIMargin);
+ fTopInset += rtUIMargin.top;
+ fBottomInset += rtUIMargin.width;
+ }
+ if (eUIType == XFA_ELEMENT_Text) {
+ FX_FLOAT fHeight = fCalcHeight;
+ if (iBlockIndex == 0) {
+ fCalcHeight = fCalcHeight - fTopInset;
+ if (fCalcHeight < 0) {
+ fCalcHeight = 0;
+ }
+ }
+ CXFA_TextLayout* pTextLayout =
+ ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout;
+ pTextLayout->DoLayout(iBlockIndex, fCalcHeight, fCalcHeight,
+ m_pLayoutData->m_fWidgetHeight - fTopInset);
+ if (fCalcHeight != 0) {
+ if (iBlockIndex == 0) {
+ fCalcHeight = fCalcHeight + fTopInset;
+ }
+ if (fabs(fHeight - fCalcHeight) < XFA_FLOAT_PERCISION) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+ }
+ XFA_ATTRIBUTEENUM iCapPlacement = XFA_ATTRIBUTEENUM_Unknown;
+ FX_FLOAT fCapReserve = 0;
+ if (iBlockIndex == 0) {
+ CXFA_Caption caption = GetCaption();
+ if (caption.IsExistInXML() &&
+ caption.GetPresence() != XFA_ATTRIBUTEENUM_Hidden) {
+ iCapPlacement = (XFA_ATTRIBUTEENUM)caption.GetPlacementType();
+ fCapReserve = caption.GetReserve();
+ }
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Top &&
+ fCalcHeight < fCapReserve + fTopInset) {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ if (iCapPlacement == XFA_ATTRIBUTEENUM_Bottom &&
+ m_pLayoutData->m_fWidgetHeight - fCapReserve - fBottomInset) {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ if (iCapPlacement != XFA_ATTRIBUTEENUM_Top) {
+ fCapReserve = 0;
+ }
+ }
+ int32_t iLinesCount = 0;
+ FX_FLOAT fHeight = m_pLayoutData->m_fWidgetHeight;
+ CFX_WideString wsText;
+ this->GetValue(wsText, XFA_VALUEPICTURE_Display);
+ if (wsText.IsEmpty()) {
+ iLinesCount = 1;
+ } else {
+ if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut) {
+ FX_FLOAT fWidth = 0;
+ GetWidth(fWidth);
+ CalculateAccWidthAndHeight(eUIType, fWidth, fHeight);
+ }
+ iLinesCount =
+ ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pTextOut->GetTotalLines();
+ }
+ if (!((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray) {
+ ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray =
+ new CFX_FloatArray;
+ }
+ CFX_FloatArray* pFieldArray =
+ ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pFieldSplitArray;
+ int32_t iFieldSplitCount = pFieldArray->GetSize();
+ for (int32_t i = 0; i < iBlockIndex * 3; i += 3) {
+ iLinesCount -= (int32_t)pFieldArray->GetAt(i + 1);
+ fHeight -= pFieldArray->GetAt(i + 2);
+ }
+ if (iLinesCount == 0) {
+ return FALSE;
+ }
+ FX_FLOAT fLineHeight = GetLineHeight();
+ FX_FLOAT fFontSize = GetFontSize();
+ FX_FLOAT fTextHeight = iLinesCount * fLineHeight - fLineHeight + fFontSize;
+ FX_FLOAT fSpaceAbove = 0;
+ FX_FLOAT fStartOffset = 0;
+ if (fHeight > 0.1f && iBlockIndex == 0) {
+ fStartOffset = fTopInset;
+ fHeight -= (fTopInset + fBottomInset);
+ if (CXFA_Para para = this->GetPara()) {
+ fSpaceAbove = para.GetSpaceAbove();
+ FX_FLOAT fSpaceBelow = para.GetSpaceBelow();
+ fHeight -= (fSpaceAbove + fSpaceBelow);
+ switch (para.GetVerticalAlign()) {
+ case XFA_ATTRIBUTEENUM_Top:
+ fStartOffset += fSpaceAbove;
+ break;
+ case XFA_ATTRIBUTEENUM_Middle:
+ fStartOffset += ((fHeight - fTextHeight) / 2 + fSpaceAbove);
+ break;
+ case XFA_ATTRIBUTEENUM_Bottom:
+ fStartOffset += (fHeight - fTextHeight + fSpaceAbove);
+ break;
+ }
+ }
+ if (fStartOffset < 0.1f) {
+ fStartOffset = 0;
+ }
+ }
+ for (int32_t i = iBlockIndex - 1; iBlockIndex > 0 && i < iBlockIndex; i++) {
+ fStartOffset = pFieldArray->GetAt(i * 3) - pFieldArray->GetAt(i * 3 + 2);
+ if (fStartOffset < 0.1f) {
+ fStartOffset = 0;
+ }
+ }
+ if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
+ pFieldArray->SetAt(0, fStartOffset);
+ } else {
+ pFieldArray->Add(fStartOffset);
+ }
+ XFA_VERSION version = GetDoc()->GetXFADoc()->GetCurVersionMode();
+ FX_BOOL bCanSplitNoContent = FALSE;
+ XFA_ATTRIBUTEENUM eLayoutMode;
+ this->GetNode()
+ ->GetNodeItem(XFA_NODEITEM_Parent)
+ ->TryEnum(XFA_ATTRIBUTE_Layout, eLayoutMode, TRUE);
+ if ((eLayoutMode == XFA_ATTRIBUTEENUM_Position ||
+ eLayoutMode == XFA_ATTRIBUTEENUM_Tb ||
+ eLayoutMode == XFA_ATTRIBUTEENUM_Row ||
+ eLayoutMode == XFA_ATTRIBUTEENUM_Table) &&
+ version > XFA_VERSION_208) {
+ bCanSplitNoContent = TRUE;
+ }
+ if ((eLayoutMode == XFA_ATTRIBUTEENUM_Tb ||
+ eLayoutMode == XFA_ATTRIBUTEENUM_Row ||
+ eLayoutMode == XFA_ATTRIBUTEENUM_Table) &&
+ version <= XFA_VERSION_208) {
+ if (fStartOffset < fCalcHeight) {
+ bCanSplitNoContent = TRUE;
+ } else {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ }
+ if (bCanSplitNoContent) {
+ if ((fCalcHeight - fTopInset - fSpaceAbove < fLineHeight)) {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ if (fStartOffset + XFA_FLOAT_PERCISION >= fCalcHeight) {
+ if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
+ pFieldArray->SetAt(iBlockIndex * 3 + 1, 0);
+ pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight);
+ } else {
+ pFieldArray->Add(0);
+ pFieldArray->Add(fCalcHeight);
+ }
+ return FALSE;
+ }
+ if (fCalcHeight - fStartOffset < fLineHeight) {
+ fCalcHeight = fStartOffset;
+ if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
+ pFieldArray->SetAt(iBlockIndex * 3 + 1, 0);
+ pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight);
+ } else {
+ pFieldArray->Add(0);
+ pFieldArray->Add(fCalcHeight);
+ }
+ return TRUE;
+ }
+ FX_FLOAT fTextNum =
+ fCalcHeight + XFA_FLOAT_PERCISION - fCapReserve - fStartOffset;
+ int32_t iLineNum =
+ (int32_t)((fTextNum + (fLineHeight - fFontSize)) / fLineHeight);
+ if (iLineNum >= iLinesCount) {
+ if (fCalcHeight - fStartOffset - fTextHeight >= fFontSize) {
+ if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
+ pFieldArray->SetAt(iBlockIndex * 3 + 1, (FX_FLOAT)iLinesCount);
+ pFieldArray->SetAt(iBlockIndex * 3 + 2, fCalcHeight);
+ } else {
+ pFieldArray->Add((FX_FLOAT)iLinesCount);
+ pFieldArray->Add(fCalcHeight);
+ }
+ return FALSE;
+ }
+ if (fHeight - fStartOffset - fTextHeight < fFontSize) {
+ iLineNum -= 1;
+ if (iLineNum == 0) {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ } else {
+ iLineNum = (int32_t)(fTextNum / fLineHeight);
+ }
+ }
+ if (iLineNum > 0) {
+ FX_FLOAT fSplitHeight =
+ iLineNum * fLineHeight + fCapReserve + fStartOffset;
+ if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
+ pFieldArray->SetAt(iBlockIndex * 3 + 1, (FX_FLOAT)iLineNum);
+ pFieldArray->SetAt(iBlockIndex * 3 + 2, fSplitHeight);
+ } else {
+ pFieldArray->Add((FX_FLOAT)iLineNum);
+ pFieldArray->Add(fSplitHeight);
+ }
+ if (fabs(fSplitHeight - fCalcHeight) < XFA_FLOAT_PERCISION) {
+ return FALSE;
+ }
+ fCalcHeight = fSplitHeight;
+ return TRUE;
+ }
+ }
+ fCalcHeight = 0;
+ return TRUE;
+}
+void CXFA_WidgetAcc::InitLayoutData() {
+ if (m_pLayoutData) {
+ return;
+ }
+ switch (GetUIType()) {
+ case XFA_ELEMENT_Text:
+ m_pLayoutData = new CXFA_TextLayoutData;
+ return;
+ case XFA_ELEMENT_TextEdit:
+ m_pLayoutData = new CXFA_TextEditData;
+ return;
+ case XFA_ELEMENT_Image:
+ m_pLayoutData = new CXFA_ImageLayoutData;
+ return;
+ case XFA_ELEMENT_ImageEdit:
+ m_pLayoutData = new CXFA_ImageEditData;
+ return;
+ default:
+ break;
+ }
+ if (GetClassID() == XFA_ELEMENT_Field) {
+ m_pLayoutData = new CXFA_FieldLayoutData;
+ } else {
+ m_pLayoutData = new CXFA_WidgetLayoutData;
+ }
+}
+void CXFA_WidgetAcc::StartTextLayout(FX_FLOAT& fCalcWidth,
+ FX_FLOAT& fCalcHeight) {
+ LoadText();
+ CXFA_TextLayout* pTextLayout =
+ ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout;
+ FX_FLOAT fTextHeight = 0;
+ if (fCalcWidth > 0 && fCalcHeight > 0) {
+ FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth);
+ pTextLayout->StartLayout(fWidth);
+ fTextHeight = fCalcHeight;
+ fTextHeight = GetHeightWithoutMargin(fTextHeight);
+ pTextLayout->DoLayout(0, fTextHeight, -1, fTextHeight);
+ return;
+ }
+ if (fCalcWidth > 0 && fCalcHeight < 0) {
+ FX_FLOAT fWidth = GetWidthWithoutMargin(fCalcWidth);
+ pTextLayout->StartLayout(fWidth);
+ }
+ if (fCalcWidth < 0 && fCalcHeight < 0) {
+ FX_FLOAT fMaxWidth = -1;
+ FX_BOOL bRet = GetWidth(fMaxWidth);
+ if (bRet) {
+ FX_FLOAT fWidth = GetWidthWithoutMargin(fMaxWidth);
+ pTextLayout->StartLayout(fWidth);
+ } else {
+ FX_FLOAT fWidth = pTextLayout->StartLayout(fMaxWidth);
+ fMaxWidth = CalculateWidgetAutoWidth(fWidth);
+ fWidth = GetWidthWithoutMargin(fMaxWidth);
+ pTextLayout->StartLayout(fWidth);
+ }
+ fCalcWidth = fMaxWidth;
+ }
+ if (m_pLayoutData->m_fWidgetHeight < 0) {
+ m_pLayoutData->m_fWidgetHeight = pTextLayout->GetLayoutHeight();
+ m_pLayoutData->m_fWidgetHeight =
+ CalculateWidgetAutoHeight(m_pLayoutData->m_fWidgetHeight);
+ }
+ fTextHeight = m_pLayoutData->m_fWidgetHeight;
+ fTextHeight = GetHeightWithoutMargin(fTextHeight);
+ pTextLayout->DoLayout(0, fTextHeight, -1, fTextHeight);
+ fCalcHeight = m_pLayoutData->m_fWidgetHeight;
+}
+FX_BOOL CXFA_WidgetAcc::LoadCaption() {
+ InitLayoutData();
+ return ((CXFA_FieldLayoutData*)m_pLayoutData)->LoadCaption(this);
+}
+CXFA_TextLayout* CXFA_WidgetAcc::GetCaptionTextLayout() {
+ return m_pLayoutData
+ ? ((CXFA_FieldLayoutData*)m_pLayoutData)->m_pCapTextLayout
+ : NULL;
+}
+CXFA_TextLayout* CXFA_WidgetAcc::GetTextLayout() {
+ return m_pLayoutData ? ((CXFA_TextLayoutData*)m_pLayoutData)->m_pTextLayout
+ : NULL;
+}
+CFX_DIBitmap* CXFA_WidgetAcc::GetImageImage() {
+ return m_pLayoutData ? ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap
+ : NULL;
+}
+CFX_DIBitmap* CXFA_WidgetAcc::GetImageEditImage() {
+ return m_pLayoutData ? ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap
+ : NULL;
+}
+void CXFA_WidgetAcc::SetImageImage(CFX_DIBitmap* newImage) {
+ if (((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap == newImage) {
+ return;
+ }
+ if (((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap &&
+ !((CXFA_ImageLayoutData*)m_pLayoutData)->m_bNamedImage) {
+ delete ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap;
+ ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap = NULL;
+ }
+ ((CXFA_ImageLayoutData*)m_pLayoutData)->m_pDIBitmap = newImage;
+}
+void CXFA_WidgetAcc::SetImageEditImage(CFX_DIBitmap* newImage) {
+ if (((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap == newImage) {
+ return;
+ }
+ if (((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap &&
+ !((CXFA_ImageEditData*)m_pLayoutData)->m_bNamedImage) {
+ delete ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap;
+ ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap = NULL;
+ }
+ ((CXFA_ImageEditData*)m_pLayoutData)->m_pDIBitmap = newImage;
+}
+CXFA_WidgetLayoutData* CXFA_WidgetAcc::GetWidgetLayoutData() {
+ return m_pLayoutData;
+}
+IFX_Font* CXFA_WidgetAcc::GetFDEFont() {
+ CFX_WideStringC wsFontName = FX_WSTRC(L"Courier");
+ FX_DWORD dwFontStyle = 0;
+ if (CXFA_Font font = this->GetFont()) {
+ if (font.IsBold()) {
+ dwFontStyle |= FX_FONTSTYLE_Bold;
+ }
+ if (font.IsItalic()) {
+ dwFontStyle |= FX_FONTSTYLE_Italic;
+ }
+ font.GetTypeface(wsFontName);
+ }
+ CXFA_FFDoc* pDoc = GetDoc();
+ return pDoc->GetApp()->GetXFAFontMgr()->GetFont(pDoc, wsFontName,
+ dwFontStyle);
+}
+FX_FLOAT CXFA_WidgetAcc::GetFontSize() {
+ FX_FLOAT fFontSize = 10.0f;
+ if (CXFA_Font font = this->GetFont()) {
+ fFontSize = font.GetFontSize();
+ }
+ return fFontSize < 0.1f ? 10.0f : fFontSize;
+}
+FX_FLOAT CXFA_WidgetAcc::GetLineHeight() {
+ FX_FLOAT fLineHeight = 0;
+ if (CXFA_Para para = this->GetPara()) {
+ fLineHeight = para.GetLineHeight();
+ }
+ if (fLineHeight < 1) {
+ fLineHeight = GetFontSize() * 1.2f;
+ }
+ return fLineHeight;
+}
+FX_ARGB CXFA_WidgetAcc::GetTextColor() {
+ if (CXFA_Font font = this->GetFont()) {
+ return font.GetColor();
+ }
+ return 0xFF000000;
+}
+CXFA_Node* CXFA_TextProvider::GetTextNode(FX_BOOL& bRichText) {
+ bRichText = FALSE;
+ if (m_pTextNode) {
+ if (m_pTextNode->GetClassID() == XFA_ELEMENT_ExData) {
+ CFX_WideString wsContentType;
+ m_pTextNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType,
+ FALSE);
+ if (wsContentType.Equal(FX_WSTRC(L"text/html"))) {
+ bRichText = TRUE;
+ }
+ }
+ return m_pTextNode;
+ }
+ if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
+ CXFA_Node* pElementNode = m_pWidgetAcc->GetNode();
+ CXFA_Node* pValueNode = pElementNode->GetChild(0, XFA_ELEMENT_Value);
+ if (!pValueNode) {
+ return NULL;
+ }
+ CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
+ if (pChildNode && pChildNode->GetClassID() == XFA_ELEMENT_ExData) {
+ CFX_WideString wsContentType;
+ pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE);
+ if (wsContentType.Equal(FX_WSTRC(L"text/html"))) {
+ bRichText = TRUE;
+ }
+ }
+ return pChildNode;
+ } else if (m_eType == XFA_TEXTPROVIDERTYPE_Datasets) {
+ CXFA_Node* pBind = m_pWidgetAcc->GetDatasets();
+ IFDE_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
+ FXSYS_assert(pXMLNode);
+ for (IFDE_XMLNode* pXMLChild =
+ pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild);
+ pXMLChild;
+ pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ if (pXMLChild->GetType() == FDE_XMLNODE_Element) {
+ IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLChild;
+ if (XFA_RecognizeRichText(pElement)) {
+ bRichText = TRUE;
+ }
+ }
+ }
+ return pBind;
+ } else if (m_eType == XFA_TEXTPROVIDERTYPE_Caption) {
+ CXFA_Node* pCaptionNode =
+ m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption);
+ if (pCaptionNode == NULL) {
+ return NULL;
+ }
+ CXFA_Node* pValueNode = pCaptionNode->GetChild(0, XFA_ELEMENT_Value);
+ if (pValueNode == NULL) {
+ return NULL;
+ }
+ CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
+ if (pChildNode && pChildNode->GetClassID() == XFA_ELEMENT_ExData) {
+ CFX_WideString wsContentType;
+ pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, FALSE);
+ if (wsContentType.Equal(FX_WSTRC(L"text/html"))) {
+ bRichText = TRUE;
+ }
+ }
+ return pChildNode;
+ }
+ CXFA_Node* pItemNode =
+ m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Items);
+ if (pItemNode == NULL) {
+ return NULL;
+ }
+ CXFA_Node* pNode = pItemNode->GetNodeItem(XFA_NODEITEM_FirstChild);
+ while (pNode) {
+ CFX_WideStringC wsName;
+ pNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
+ if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover &&
+ wsName == FX_WSTRC(L"rollover")) {
+ return pNode;
+ }
+ if (m_eType == XFA_TEXTPROVIDERTYPE_Down && wsName == FX_WSTRC(L"down")) {
+ return pNode;
+ }
+ pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling);
+ }
+ return NULL;
+}
+CXFA_Para CXFA_TextProvider::GetParaNode() {
+ if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
+ return m_pWidgetAcc->GetPara();
+ }
+ CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption);
+ return pNode->GetChild(0, XFA_ELEMENT_Para);
+}
+CXFA_Font CXFA_TextProvider::GetFontNode() {
+ if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
+ return m_pWidgetAcc->GetFont();
+ }
+ CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_ELEMENT_Caption);
+ pNode = pNode->GetChild(0, XFA_ELEMENT_Font);
+ if (pNode) {
+ return pNode;
+ }
+ return m_pWidgetAcc->GetFont();
+}
+FX_BOOL CXFA_TextProvider::IsCheckButtonAndAutoWidth() {
+ XFA_ELEMENT eType = m_pWidgetAcc->GetUIType();
+ if (eType == XFA_ELEMENT_CheckButton) {
+ FX_FLOAT fWidth = 0;
+ return !m_pWidgetAcc->GetWidth(fWidth);
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_TextProvider::GetEmbbedObj(FX_BOOL bURI,
+ FX_BOOL bRaw,
+ const CFX_WideString& wsAttr,
+ CFX_WideString& wsValue) {
+ if (m_eType != XFA_TEXTPROVIDERTYPE_Text) {
+ return FALSE;
+ }
+ if (bURI) {
+ CXFA_Node* pWidgetNode = m_pWidgetAcc->GetNode();
+ CXFA_Node* pParent = pWidgetNode->GetNodeItem(XFA_NODEITEM_Parent);
+ CXFA_Document* pDocument = pWidgetNode->GetDocument();
+ CXFA_Node* pIDNode = NULL;
+ CXFA_WidgetAcc* pEmbAcc = NULL;
+ if (pParent) {
+ pIDNode = pDocument->GetNodeByID(pParent, wsAttr);
+ }
+ if (!pIDNode) {
+ pIDNode = pDocument->GetNodeByID(
+ (CXFA_Node*)pDocument->GetXFANode(XFA_HASHCODE_Form), wsAttr);
+ }
+ if (pIDNode) {
+ pEmbAcc = (CXFA_WidgetAcc*)pIDNode->GetWidgetData();
+ }
+ if (pEmbAcc) {
+ pEmbAcc->GetValue(wsValue, XFA_VALUEPICTURE_Display);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidgetacc.h b/xfa/src/fxfa/src/app/xfa_ffwidgetacc.h
index 269fccd09d..4be5fadc20 100644
--- a/xfa/src/fxfa/src/app/xfa_ffwidgetacc.h
+++ b/xfa/src/fxfa/src/app/xfa_ffwidgetacc.h
@@ -1,41 +1,41 @@
-// 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 _FXFA_FORMFILLER_WIDGETACC_IMP_H
-#define _FXFA_FORMFILLER_WIDGETACC_IMP_H
-#include "xfa_textlayout.h"
-enum XFA_TEXTPROVIDERTYPE {
- XFA_TEXTPROVIDERTYPE_Text,
- XFA_TEXTPROVIDERTYPE_Datasets,
- XFA_TEXTPROVIDERTYPE_Caption,
- XFA_TEXTPROVIDERTYPE_Rollover,
- XFA_TEXTPROVIDERTYPE_Down,
-};
-class CXFA_TextProvider : public IXFA_TextProvider {
- public:
- CXFA_TextProvider(CXFA_WidgetAcc* pWidgetAcc,
- XFA_TEXTPROVIDERTYPE eType,
- CXFA_Node* pTextNode = NULL)
- : m_pWidgetAcc(pWidgetAcc), m_eType(eType), m_pTextNode(pTextNode) {
- FXSYS_assert(m_pWidgetAcc != NULL);
- }
- virtual ~CXFA_TextProvider() {}
- virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText);
- virtual CXFA_Para GetParaNode();
- virtual CXFA_Font GetFontNode();
- virtual FX_BOOL IsCheckButtonAndAutoWidth();
- virtual CXFA_FFDoc* GetDocNode() { return m_pWidgetAcc->GetDoc(); }
- virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI,
- FX_BOOL bRaw,
- const CFX_WideString& wsAttr,
- CFX_WideString& wsValue);
-
- protected:
- CXFA_WidgetAcc* m_pWidgetAcc;
- XFA_TEXTPROVIDERTYPE m_eType;
- CXFA_Node* m_pTextNode;
-};
-#endif
+// 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 _FXFA_FORMFILLER_WIDGETACC_IMP_H
+#define _FXFA_FORMFILLER_WIDGETACC_IMP_H
+#include "xfa_textlayout.h"
+enum XFA_TEXTPROVIDERTYPE {
+ XFA_TEXTPROVIDERTYPE_Text,
+ XFA_TEXTPROVIDERTYPE_Datasets,
+ XFA_TEXTPROVIDERTYPE_Caption,
+ XFA_TEXTPROVIDERTYPE_Rollover,
+ XFA_TEXTPROVIDERTYPE_Down,
+};
+class CXFA_TextProvider : public IXFA_TextProvider {
+ public:
+ CXFA_TextProvider(CXFA_WidgetAcc* pWidgetAcc,
+ XFA_TEXTPROVIDERTYPE eType,
+ CXFA_Node* pTextNode = NULL)
+ : m_pWidgetAcc(pWidgetAcc), m_eType(eType), m_pTextNode(pTextNode) {
+ FXSYS_assert(m_pWidgetAcc != NULL);
+ }
+ virtual ~CXFA_TextProvider() {}
+ virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText);
+ virtual CXFA_Para GetParaNode();
+ virtual CXFA_Font GetFontNode();
+ virtual FX_BOOL IsCheckButtonAndAutoWidth();
+ virtual CXFA_FFDoc* GetDocNode() { return m_pWidgetAcc->GetDoc(); }
+ virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI,
+ FX_BOOL bRaw,
+ const CFX_WideString& wsAttr,
+ CFX_WideString& wsValue);
+
+ protected:
+ CXFA_WidgetAcc* m_pWidgetAcc;
+ XFA_TEXTPROVIDERTYPE m_eType;
+ CXFA_Node* m_pTextNode;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp b/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp
index 6af98a6456..def79b7962 100644
--- a/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp
@@ -1,639 +1,639 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffwidgethandler.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffchoicelist.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffdocview.h"
-CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView)
- : m_pDocView(pDocView) {}
-CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {}
-IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->GetPageView();
-}
-void CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) {
- static_cast<CXFA_FFWidget*>(hWidget)->GetWidgetRect(rt);
-}
-FX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->GetStatus();
-}
-FX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget,
- CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus) {
- return static_cast<CXFA_FFWidget*>(hWidget)
- ->GetBBox(rtBox, dwStatus, bDrawFocus);
-}
-CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc();
-}
-void CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget,
- CFX_WideString& wsName,
- int32_t iNameType) {
- static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc()->GetName(wsName,
- iNameType);
-}
-FX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget,
- CFX_WideString& wsToolTip) {
- return static_cast<CXFA_FFWidget*>(hWidget)->GetToolTip(wsToolTip);
-}
-void CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget,
- void* module_id,
- void* pData,
- PD_CALLBACK_FREEDATA callback) {
- static_cast<CXFA_FFWidget*>(hWidget)
- ->SetPrivateData(module_id, pData, callback);
-}
-void* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget,
- void* module_id) {
- return static_cast<CXFA_FFWidget*>(hWidget)->GetPrivateData(module_id);
-}
-FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) {
- m_pDocView->LockUpdate();
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseEnter();
- m_pDocView->UnlockUpdate();
- m_pDocView->UpdateDocView();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) {
- m_pDocView->LockUpdate();
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseExit();
- m_pDocView->UnlockUpdate();
- m_pDocView->UpdateDocView();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- m_pDocView->LockUpdate();
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDown(dwFlags, fx, fy);
- if (bRet && m_pDocView->SetFocus(hWidget)) {
- ((CXFA_FFDoc*)m_pDocView->GetDoc())
- ->GetDocProvider()
- ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget);
- }
- m_pDocView->UnlockUpdate();
- m_pDocView->UpdateDocView();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- m_pDocView->LockUpdate();
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- m_pDocView->m_bLayoutEvent = TRUE;
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonUp(dwFlags, fx, fy);
- m_pDocView->UnlockUpdate();
- m_pDocView->UpdateDocView();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDblClk(dwFlags, fx, fy);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnMouseMove(dwFlags, fx, fy);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)
- ->OnMouseWheel(dwFlags, zDelta, fx, fy);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDown(dwFlags, fx, fy);
- if (bRet && m_pDocView->SetFocus(hWidget)) {
- ((CXFA_FFDoc*)m_pDocView->GetDoc())
- ->GetDocProvider()
- ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget);
- }
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonUp(dwFlags, fx, fy);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDblClk(dwFlags, fx, fy);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget,
- FX_DWORD dwKeyCode,
- FX_DWORD dwFlags) {
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnKeyDown(dwKeyCode, dwFlags);
- m_pDocView->RunInvalidate();
- m_pDocView->UpdateDocView();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget,
- FX_DWORD dwKeyCode,
- FX_DWORD dwFlags) {
- FX_BOOL bRet =
- static_cast<CXFA_FFWidget*>(hWidget)->OnKeyUp(dwKeyCode, dwFlags);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget,
- FX_DWORD dwChar,
- FX_DWORD dwFlags) {
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnChar(dwChar, dwFlags);
- m_pDocView->RunInvalidate();
- return bRet;
-}
-FX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- if (!(static_cast<CXFA_FFWidget*>(hWidget)->GetStatus() &
- XFA_WIDGETSTATUS_Visible)) {
- return FWL_WGTHITTEST_Unknown;
- }
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- return static_cast<CXFA_FFWidget*>(hWidget)->OnHitTest(fx, fy);
-}
-FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
- return static_cast<CXFA_FFWidget*>(hWidget)->OnSetCursor(fx, fy);
-}
-void CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget,
- CFX_Graphics* pGS,
- CFX_Matrix* pMatrix,
- FX_BOOL bHighlight) {
- static_cast<CXFA_FFWidget*>(hWidget)->RenderWidget(
- pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0);
-}
-FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc,
- XFA_EVENTTYPE eEventType) {
- if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) {
- return FALSE;
- }
- if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
- return FALSE;
- }
- switch (eEventType) {
- case XFA_EVENT_Calculate: {
- CXFA_Calculate calc = pWidgetAcc->GetCalculate();
- if (!calc) {
- return FALSE;
- }
- if (calc.GetScript()) {
- return TRUE;
- }
- return FALSE;
- }
- case XFA_EVENT_Validate: {
- CXFA_Validate val = pWidgetAcc->GetValidate();
- if (!val) {
- return FALSE;
- }
- if (val.GetScript()) {
- return TRUE;
- }
- return FALSE;
- }
- default:
- break;
- }
- CXFA_NodeArray eventArray;
- return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType],
- eventArray);
-}
-int32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
- CXFA_EventParam* pParam) {
- if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) {
- return XFA_EVENTERROR_NotExist;
- }
- if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
- return XFA_EVENTERROR_NotExist;
- }
- switch (pParam->m_eType) {
- case XFA_EVENT_Calculate:
- return pWidgetAcc->ProcessCalculate();
- case XFA_EVENT_Validate:
- if (((CXFA_FFDoc*)m_pDocView->GetDoc())
- ->GetDocProvider()
- ->IsValidationsEnabled(m_pDocView->GetDoc())) {
- return pWidgetAcc->ProcessValidate();
- }
- return XFA_EVENTERROR_Disabled;
- case XFA_EVENT_InitCalculate: {
- CXFA_Calculate calc = pWidgetAcc->GetCalculate();
- if (!calc) {
- return XFA_EVENTERROR_NotExist;
- }
- if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
- return XFA_EVENTERROR_Disabled;
- }
- CXFA_Script script = calc.GetScript();
- return pWidgetAcc->ExecuteScript(script, pParam);
- }
- default:
- break;
- }
- int32_t iRet =
- pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam);
- return iRet;
-}
-IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent,
- XFA_WIDGETTYPE eType,
- IXFA_Widget* hBefore) {
- CXFA_Node* pParentFormItem =
- hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode()
- : NULL;
- CXFA_Node* pBeforeFormItem =
- hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode()
- : NULL;
- CXFA_Node* pNewFormItem =
- CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem);
- if (pNewFormItem == NULL) {
- return NULL;
- }
- pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized);
- pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized);
- m_pDocView->RunLayout();
- CXFA_LayoutItem* pLayout =
- m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem);
- return (IXFA_Widget*)pLayout;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem(
- XFA_WIDGETTYPE eType,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- switch (eType) {
- case XFA_WIDGETTYPE_Barcode:
- return NULL;
- case XFA_WIDGETTYPE_PushButton:
- return CreatePushButton(pParent, pBefore);
- case XFA_WIDGETTYPE_CheckButton:
- return CreateCheckButton(pParent, pBefore);
- case XFA_WIDGETTYPE_ExcludeGroup:
- return CreateExclGroup(pParent, pBefore);
- case XFA_WIDGETTYPE_RadioButton:
- return CreateRadioButton(pParent, pBefore);
- case XFA_WIDGETTYPE_Arc:
- return CreateArc(pParent, pBefore);
- case XFA_WIDGETTYPE_Rectangle:
- return CreateRectangle(pParent, pBefore);
- case XFA_WIDGETTYPE_Image:
- return CreateImage(pParent, pBefore);
- case XFA_WIDGETTYPE_Line:
- return CreateLine(pParent, pBefore);
- case XFA_WIDGETTYPE_Text:
- return CreateText(pParent, pBefore);
- case XFA_WIDGETTYPE_DatetimeEdit:
- return CreateDatetimeEdit(pParent, pBefore);
- case XFA_WIDGETTYPE_DecimalField:
- return CreateDecimalField(pParent, pBefore);
- case XFA_WIDGETTYPE_NumericField:
- return CreateNumericField(pParent, pBefore);
- case XFA_WIDGETTYPE_Signature:
- return CreateSignature(pParent, pBefore);
- case XFA_WIDGETTYPE_TextEdit:
- return CreateTextEdit(pParent, pBefore);
- case XFA_WIDGETTYPE_DropdownList:
- return CreateDropdownList(pParent, pBefore);
- case XFA_WIDGETTYPE_ListBox:
- return CreateListBox(pParent, pBefore);
- case XFA_WIDGETTYPE_ImageField:
- return CreateImageField(pParent, pBefore);
- case XFA_WIDGETTYPE_PasswordEdit:
- return CreatePasswordEdit(pParent, pBefore);
- case XFA_WIDGETTYPE_Subform:
- return CreateSubform(pParent, pBefore);
- default:
- break;
- }
- return NULL;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore);
- CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField);
- CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption);
- CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue);
- pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE);
- CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption);
- pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE);
- pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE);
- CreateFontNode(pCaption);
- CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField);
- pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE);
- CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder);
- pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE);
- CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder);
- CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill);
- pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE);
- CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
- pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore);
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
- CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui);
- CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton);
- pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore);
- CreateValueNode(XFA_ELEMENT_Date, pField);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateNumericField(pParent, pBefore);
- CreateValueNode(XFA_ELEMENT_Decimal, pField);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
- CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild);
- CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild);
- pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always);
- pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore);
- CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
- pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore);
- CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField));
- CreateFontNode(pField);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore);
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore);
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore);
- CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField));
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore);
- CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField));
- CreateFontNode(pField);
- return pField;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore);
- CreateValueNode(eElement, pDraw);
- return pDraw;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore);
- return pSubform;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pTemplateParent =
- pParent != NULL ? pParent->GetTemplateNode() : NULL;
- CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE);
- if (pParent != NULL) {
- pParent->InsertChild(pNewFormItem, pBefore);
- }
- return pNewFormItem;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Node* pTemplateParent =
- pParent != NULL ? pParent->GetTemplateNode() : NULL;
- CXFA_Node* pNewNode =
- CreateTemplateNode(eElement, pTemplateParent,
- pBefore ? pBefore->GetTemplateNode() : NULL)
- ->Clone(FALSE);
- if (pParent != NULL) {
- pParent->InsertChild(pNewNode, pBefore);
- }
- return pNewNode;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const {
- CXFA_Document* pXFADoc = GetXFADoc();
- CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode(
- XFA_XDPPACKET_Template, eElement);
- if (pParent != NULL) {
- pParent->InsertChild(pNewTemplateNode, pBefore);
- }
- return pNewTemplateNode;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const {
- CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent);
- pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE);
- return pFont;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent,
- FX_DWORD dwFlags,
- FX_FLOAT fInsets[4]) const {
- CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent);
- if (dwFlags & 0x01) {
- pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset,
- CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE);
- }
- if (dwFlags & 0x02) {
- pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset,
- CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE);
- }
- if (dwFlags & 0x04) {
- pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset,
- CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE);
- }
- if (dwFlags & 0x08) {
- pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset,
- CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE);
- }
- return pMargin;
-}
-CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue,
- CXFA_Node* pParent) const {
- CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent);
- CreateCopyNode(eValue, pValue);
- return pValue;
-}
-IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const {
- return GetXFADoc()->GetParser()->GetFactory();
-}
-CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const {
- return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc();
-}
-CXFA_FFMenuHandler::CXFA_FFMenuHandler() {}
-CXFA_FFMenuHandler::~CXFA_FFMenuHandler() {}
-FX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanCopy();
-}
-FX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanCut();
-}
-FX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanPaste();
-}
-FX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanSelectAll();
-}
-FX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanDelete();
-}
-FX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanDeSelect();
-}
-FX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) {
- return static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsText);
-}
-FX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) {
- return static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsText);
-}
-FX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget,
- const CFX_WideString& wsText) {
- return static_cast<CXFA_FFWidget*>(hWidget)->Paste(wsText);
-}
-FX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->SelectAll();
-}
-FX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->Delete();
-}
-FX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->DeSelect();
-}
-FX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanUndo();
-}
-FX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->CanRedo();
-}
-FX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->Undo();
-}
-FX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) {
- return static_cast<CXFA_FFWidget*>(hWidget)->Redo();
-}
-#define FX_EDIT_ISLATINWORD(u) \
- (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \
- (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \
- u == 0x0027)
-FX_BOOL CXFA_FFMenuHandler::GetSuggestWords(IXFA_Widget* hWidget,
- CFX_PointF pointf,
- CFX_ByteStringArray& sSuggest) {
- return static_cast<CXFA_FFWidget*>(hWidget)
- ->GetSuggestWords(pointf, sSuggest);
-}
-FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord(
- IXFA_Widget* hWidget,
- CFX_PointF pointf,
- const CFX_ByteStringC& bsReplace) {
- return static_cast<CXFA_FFWidget*>(hWidget)
- ->ReplaceSpellCheckWord(pointf, bsReplace);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffwidgethandler.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffchoicelist.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffdocview.h"
+CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView)
+ : m_pDocView(pDocView) {}
+CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {}
+IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetPageView();
+}
+void CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) {
+ static_cast<CXFA_FFWidget*>(hWidget)->GetWidgetRect(rt);
+}
+FX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetStatus();
+}
+FX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget,
+ CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus) {
+ return static_cast<CXFA_FFWidget*>(hWidget)
+ ->GetBBox(rtBox, dwStatus, bDrawFocus);
+}
+CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc();
+}
+void CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget,
+ CFX_WideString& wsName,
+ int32_t iNameType) {
+ static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc()->GetName(wsName,
+ iNameType);
+}
+FX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget,
+ CFX_WideString& wsToolTip) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetToolTip(wsToolTip);
+}
+void CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget,
+ void* module_id,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback) {
+ static_cast<CXFA_FFWidget*>(hWidget)
+ ->SetPrivateData(module_id, pData, callback);
+}
+void* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget,
+ void* module_id) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetPrivateData(module_id);
+}
+FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) {
+ m_pDocView->LockUpdate();
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseEnter();
+ m_pDocView->UnlockUpdate();
+ m_pDocView->UpdateDocView();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) {
+ m_pDocView->LockUpdate();
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseExit();
+ m_pDocView->UnlockUpdate();
+ m_pDocView->UpdateDocView();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ m_pDocView->LockUpdate();
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDown(dwFlags, fx, fy);
+ if (bRet && m_pDocView->SetFocus(hWidget)) {
+ ((CXFA_FFDoc*)m_pDocView->GetDoc())
+ ->GetDocProvider()
+ ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget);
+ }
+ m_pDocView->UnlockUpdate();
+ m_pDocView->UpdateDocView();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ m_pDocView->LockUpdate();
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ m_pDocView->m_bLayoutEvent = TRUE;
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonUp(dwFlags, fx, fy);
+ m_pDocView->UnlockUpdate();
+ m_pDocView->UpdateDocView();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDblClk(dwFlags, fx, fy);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnMouseMove(dwFlags, fx, fy);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)
+ ->OnMouseWheel(dwFlags, zDelta, fx, fy);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDown(dwFlags, fx, fy);
+ if (bRet && m_pDocView->SetFocus(hWidget)) {
+ ((CXFA_FFDoc*)m_pDocView->GetDoc())
+ ->GetDocProvider()
+ ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget);
+ }
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonUp(dwFlags, fx, fy);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDblClk(dwFlags, fx, fy);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget,
+ FX_DWORD dwKeyCode,
+ FX_DWORD dwFlags) {
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnKeyDown(dwKeyCode, dwFlags);
+ m_pDocView->RunInvalidate();
+ m_pDocView->UpdateDocView();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget,
+ FX_DWORD dwKeyCode,
+ FX_DWORD dwFlags) {
+ FX_BOOL bRet =
+ static_cast<CXFA_FFWidget*>(hWidget)->OnKeyUp(dwKeyCode, dwFlags);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget,
+ FX_DWORD dwChar,
+ FX_DWORD dwFlags) {
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnChar(dwChar, dwFlags);
+ m_pDocView->RunInvalidate();
+ return bRet;
+}
+FX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ if (!(static_cast<CXFA_FFWidget*>(hWidget)->GetStatus() &
+ XFA_WIDGETSTATUS_Visible)) {
+ return FWL_WGTHITTEST_Unknown;
+ }
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ return static_cast<CXFA_FFWidget*>(hWidget)->OnHitTest(fx, fy);
+}
+FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
+ return static_cast<CXFA_FFWidget*>(hWidget)->OnSetCursor(fx, fy);
+}
+void CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget,
+ CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ FX_BOOL bHighlight) {
+ static_cast<CXFA_FFWidget*>(hWidget)->RenderWidget(
+ pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0);
+}
+FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc,
+ XFA_EVENTTYPE eEventType) {
+ if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) {
+ return FALSE;
+ }
+ if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
+ return FALSE;
+ }
+ switch (eEventType) {
+ case XFA_EVENT_Calculate: {
+ CXFA_Calculate calc = pWidgetAcc->GetCalculate();
+ if (!calc) {
+ return FALSE;
+ }
+ if (calc.GetScript()) {
+ return TRUE;
+ }
+ return FALSE;
+ }
+ case XFA_EVENT_Validate: {
+ CXFA_Validate val = pWidgetAcc->GetValidate();
+ if (!val) {
+ return FALSE;
+ }
+ if (val.GetScript()) {
+ return TRUE;
+ }
+ return FALSE;
+ }
+ default:
+ break;
+ }
+ CXFA_NodeArray eventArray;
+ return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType],
+ eventArray);
+}
+int32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
+ CXFA_EventParam* pParam) {
+ if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ switch (pParam->m_eType) {
+ case XFA_EVENT_Calculate:
+ return pWidgetAcc->ProcessCalculate();
+ case XFA_EVENT_Validate:
+ if (((CXFA_FFDoc*)m_pDocView->GetDoc())
+ ->GetDocProvider()
+ ->IsValidationsEnabled(m_pDocView->GetDoc())) {
+ return pWidgetAcc->ProcessValidate();
+ }
+ return XFA_EVENTERROR_Disabled;
+ case XFA_EVENT_InitCalculate: {
+ CXFA_Calculate calc = pWidgetAcc->GetCalculate();
+ if (!calc) {
+ return XFA_EVENTERROR_NotExist;
+ }
+ if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
+ return XFA_EVENTERROR_Disabled;
+ }
+ CXFA_Script script = calc.GetScript();
+ return pWidgetAcc->ExecuteScript(script, pParam);
+ }
+ default:
+ break;
+ }
+ int32_t iRet =
+ pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam);
+ return iRet;
+}
+IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent,
+ XFA_WIDGETTYPE eType,
+ IXFA_Widget* hBefore) {
+ CXFA_Node* pParentFormItem =
+ hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode()
+ : NULL;
+ CXFA_Node* pBeforeFormItem =
+ hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode()
+ : NULL;
+ CXFA_Node* pNewFormItem =
+ CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem);
+ if (pNewFormItem == NULL) {
+ return NULL;
+ }
+ pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized);
+ pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized);
+ m_pDocView->RunLayout();
+ CXFA_LayoutItem* pLayout =
+ m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem);
+ return (IXFA_Widget*)pLayout;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem(
+ XFA_WIDGETTYPE eType,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ switch (eType) {
+ case XFA_WIDGETTYPE_Barcode:
+ return NULL;
+ case XFA_WIDGETTYPE_PushButton:
+ return CreatePushButton(pParent, pBefore);
+ case XFA_WIDGETTYPE_CheckButton:
+ return CreateCheckButton(pParent, pBefore);
+ case XFA_WIDGETTYPE_ExcludeGroup:
+ return CreateExclGroup(pParent, pBefore);
+ case XFA_WIDGETTYPE_RadioButton:
+ return CreateRadioButton(pParent, pBefore);
+ case XFA_WIDGETTYPE_Arc:
+ return CreateArc(pParent, pBefore);
+ case XFA_WIDGETTYPE_Rectangle:
+ return CreateRectangle(pParent, pBefore);
+ case XFA_WIDGETTYPE_Image:
+ return CreateImage(pParent, pBefore);
+ case XFA_WIDGETTYPE_Line:
+ return CreateLine(pParent, pBefore);
+ case XFA_WIDGETTYPE_Text:
+ return CreateText(pParent, pBefore);
+ case XFA_WIDGETTYPE_DatetimeEdit:
+ return CreateDatetimeEdit(pParent, pBefore);
+ case XFA_WIDGETTYPE_DecimalField:
+ return CreateDecimalField(pParent, pBefore);
+ case XFA_WIDGETTYPE_NumericField:
+ return CreateNumericField(pParent, pBefore);
+ case XFA_WIDGETTYPE_Signature:
+ return CreateSignature(pParent, pBefore);
+ case XFA_WIDGETTYPE_TextEdit:
+ return CreateTextEdit(pParent, pBefore);
+ case XFA_WIDGETTYPE_DropdownList:
+ return CreateDropdownList(pParent, pBefore);
+ case XFA_WIDGETTYPE_ListBox:
+ return CreateListBox(pParent, pBefore);
+ case XFA_WIDGETTYPE_ImageField:
+ return CreateImageField(pParent, pBefore);
+ case XFA_WIDGETTYPE_PasswordEdit:
+ return CreatePasswordEdit(pParent, pBefore);
+ case XFA_WIDGETTYPE_Subform:
+ return CreateSubform(pParent, pBefore);
+ default:
+ break;
+ }
+ return NULL;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore);
+ CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField);
+ CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption);
+ CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue);
+ pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE);
+ CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption);
+ pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE);
+ pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE);
+ CreateFontNode(pCaption);
+ CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField);
+ pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE);
+ CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder);
+ pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE);
+ CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder);
+ CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill);
+ pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE);
+ CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
+ pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore);
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
+ CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui);
+ CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton);
+ pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore);
+ CreateValueNode(XFA_ELEMENT_Date, pField);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateNumericField(pParent, pBefore);
+ CreateValueNode(XFA_ELEMENT_Decimal, pField);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
+ CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild);
+ CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild);
+ pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always);
+ pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore);
+ CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
+ pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore);
+ CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField));
+ CreateFontNode(pField);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore);
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore);
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore);
+ CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField));
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore);
+ CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField));
+ CreateFontNode(pField);
+ return pField;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore);
+ CreateValueNode(eElement, pDraw);
+ return pDraw;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore);
+ return pSubform;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pTemplateParent =
+ pParent != NULL ? pParent->GetTemplateNode() : NULL;
+ CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE);
+ if (pParent != NULL) {
+ pParent->InsertChild(pNewFormItem, pBefore);
+ }
+ return pNewFormItem;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Node* pTemplateParent =
+ pParent != NULL ? pParent->GetTemplateNode() : NULL;
+ CXFA_Node* pNewNode =
+ CreateTemplateNode(eElement, pTemplateParent,
+ pBefore ? pBefore->GetTemplateNode() : NULL)
+ ->Clone(FALSE);
+ if (pParent != NULL) {
+ pParent->InsertChild(pNewNode, pBefore);
+ }
+ return pNewNode;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const {
+ CXFA_Document* pXFADoc = GetXFADoc();
+ CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode(
+ XFA_XDPPACKET_Template, eElement);
+ if (pParent != NULL) {
+ pParent->InsertChild(pNewTemplateNode, pBefore);
+ }
+ return pNewTemplateNode;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const {
+ CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent);
+ pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE);
+ return pFont;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent,
+ FX_DWORD dwFlags,
+ FX_FLOAT fInsets[4]) const {
+ CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent);
+ if (dwFlags & 0x01) {
+ pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset,
+ CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE);
+ }
+ if (dwFlags & 0x02) {
+ pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset,
+ CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE);
+ }
+ if (dwFlags & 0x04) {
+ pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset,
+ CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE);
+ }
+ if (dwFlags & 0x08) {
+ pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset,
+ CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE);
+ }
+ return pMargin;
+}
+CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue,
+ CXFA_Node* pParent) const {
+ CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent);
+ CreateCopyNode(eValue, pValue);
+ return pValue;
+}
+IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const {
+ return GetXFADoc()->GetParser()->GetFactory();
+}
+CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const {
+ return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc();
+}
+CXFA_FFMenuHandler::CXFA_FFMenuHandler() {}
+CXFA_FFMenuHandler::~CXFA_FFMenuHandler() {}
+FX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanCopy();
+}
+FX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanCut();
+}
+FX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanPaste();
+}
+FX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanSelectAll();
+}
+FX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanDelete();
+}
+FX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanDeSelect();
+}
+FX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsText);
+}
+FX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsText);
+}
+FX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget,
+ const CFX_WideString& wsText) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->Paste(wsText);
+}
+FX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->SelectAll();
+}
+FX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->Delete();
+}
+FX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->DeSelect();
+}
+FX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanUndo();
+}
+FX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanRedo();
+}
+FX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->Undo();
+}
+FX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) {
+ return static_cast<CXFA_FFWidget*>(hWidget)->Redo();
+}
+#define FX_EDIT_ISLATINWORD(u) \
+ (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \
+ (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \
+ u == 0x0027)
+FX_BOOL CXFA_FFMenuHandler::GetSuggestWords(IXFA_Widget* hWidget,
+ CFX_PointF pointf,
+ CFX_ByteStringArray& sSuggest) {
+ return static_cast<CXFA_FFWidget*>(hWidget)
+ ->GetSuggestWords(pointf, sSuggest);
+}
+FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord(
+ IXFA_Widget* hWidget,
+ CFX_PointF pointf,
+ const CFX_ByteStringC& bsReplace) {
+ return static_cast<CXFA_FFWidget*>(hWidget)
+ ->ReplaceSpellCheckWord(pointf, bsReplace);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidgethandler.h b/xfa/src/fxfa/src/app/xfa_ffwidgethandler.h
index ae883678ce..26b8850b4e 100644
--- a/xfa/src/fxfa/src/app/xfa_ffwidgethandler.h
+++ b/xfa/src/fxfa/src/app/xfa_ffwidgethandler.h
@@ -1,167 +1,167 @@
-// 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 _FXFA_FORMFILLER_ANNOTHANDLER_IMP_H
-#define _FXFA_FORMFILLER_ANNOTHANDLER_IMP_H
-class CXFA_FFDocView;
-class CXFA_FFWidgetHandler : public IXFA_WidgetHandler {
- public:
- CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView);
- ~CXFA_FFWidgetHandler();
- virtual IXFA_Widget* CreateWidget(IXFA_Widget* hParent,
- XFA_WIDGETTYPE eType,
- IXFA_Widget* hBefore = NULL);
- virtual IXFA_PageView* GetPageView(IXFA_Widget* hWidget);
- virtual void GetRect(IXFA_Widget* hWidget, CFX_RectF& rt);
- virtual FX_DWORD GetStatus(IXFA_Widget* hWidget);
- virtual FX_BOOL GetBBox(IXFA_Widget* hWidget,
- CFX_RectF& rtBox,
- FX_DWORD dwStatus,
- FX_BOOL bDrawFocus = FALSE);
- virtual CXFA_WidgetAcc* GetDataAcc(IXFA_Widget* hWidget);
- virtual void GetName(IXFA_Widget* hWidget,
- CFX_WideString& wsName,
- int32_t iNameType = 0);
- virtual FX_BOOL GetToolTip(IXFA_Widget* hWidget, CFX_WideString& wsToolTip);
- virtual void SetPrivateData(IXFA_Widget* hWidget,
- void* module_id,
- void* pData,
- PD_CALLBACK_FREEDATA callback);
- virtual void* GetPrivateData(IXFA_Widget* hWidget, void* module_id);
- virtual FX_BOOL OnMouseEnter(IXFA_Widget* hWidget);
- virtual FX_BOOL OnMouseExit(IXFA_Widget* hWidget);
- virtual FX_BOOL OnLButtonDown(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnLButtonUp(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnLButtonDblClk(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnMouseMove(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnMouseWheel(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- int16_t zDelta,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDown(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnRButtonUp(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
- virtual FX_BOOL OnRButtonDblClk(IXFA_Widget* hWidget,
- FX_DWORD dwFlags,
- FX_FLOAT fx,
- FX_FLOAT fy);
-
- virtual FX_BOOL OnKeyDown(IXFA_Widget* hWidget,
- FX_DWORD dwKeyCode,
- FX_DWORD dwFlags);
- virtual FX_BOOL OnKeyUp(IXFA_Widget* hWidget,
- FX_DWORD dwKeyCode,
- FX_DWORD dwFlags);
- virtual FX_BOOL OnChar(IXFA_Widget* hWidget,
- FX_DWORD dwChar,
- FX_DWORD dwFlags);
- virtual FX_DWORD OnHitTest(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy);
- virtual FX_BOOL OnSetCursor(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy);
- virtual void RenderWidget(IXFA_Widget* hWidget,
- CFX_Graphics* pGS,
- CFX_Matrix* pMatrix = NULL,
- FX_BOOL bHighlight = FALSE);
- virtual FX_BOOL HasEvent(CXFA_WidgetAcc* pWidgetAcc,
- XFA_EVENTTYPE eEventType);
- virtual int32_t ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
- CXFA_EventParam* pParam);
-
- protected:
- CXFA_Node* CreateWidgetFormItem(XFA_WIDGETTYPE eType,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const;
-
- CXFA_Node* CreatePushButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateCheckButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateExclGroup(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateRadioButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateDatetimeEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateDecimalField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateNumericField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateSignature(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateTextEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateDropdownList(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateListBox(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateImageField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreatePasswordEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateField(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const;
- CXFA_Node* CreateArc(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateRectangle(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateImage(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateLine(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateText(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateDraw(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const;
-
- CXFA_Node* CreateSubform(CXFA_Node* pParent, CXFA_Node* pBefore) const;
- CXFA_Node* CreateFormItem(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const;
- CXFA_Node* CreateCopyNode(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore = NULL) const;
- CXFA_Node* CreateTemplateNode(XFA_ELEMENT eElement,
- CXFA_Node* pParent,
- CXFA_Node* pBefore) const;
- CXFA_Node* CreateFontNode(CXFA_Node* pParent) const;
- CXFA_Node* CreateMarginNode(CXFA_Node* pParent,
- FX_DWORD dwFlags,
- FX_FLOAT fInsets[4]) const;
- CXFA_Node* CreateValueNode(XFA_ELEMENT eValue, CXFA_Node* pParent) const;
- IXFA_ObjFactory* GetObjFactory() const;
- CXFA_Document* GetXFADoc() const;
-
- CXFA_FFDocView* m_pDocView;
-};
-class CXFA_FFMenuHandler : public IXFA_MenuHandler {
- public:
- CXFA_FFMenuHandler();
- ~CXFA_FFMenuHandler();
- virtual FX_BOOL CanCopy(IXFA_Widget* hWidget);
- virtual FX_BOOL CanCut(IXFA_Widget* hWidget);
- virtual FX_BOOL CanPaste(IXFA_Widget* hWidget);
- virtual FX_BOOL CanSelectAll(IXFA_Widget* hWidget);
- virtual FX_BOOL CanDelete(IXFA_Widget* hWidget);
- virtual FX_BOOL CanDeSelect(IXFA_Widget* hWidget);
- virtual FX_BOOL Copy(IXFA_Widget* hWidget, CFX_WideString& wsText);
- virtual FX_BOOL Cut(IXFA_Widget* hWidget, CFX_WideString& wsText);
- virtual FX_BOOL Paste(IXFA_Widget* hWidget, const CFX_WideString& wsText);
- virtual FX_BOOL SelectAll(IXFA_Widget* hWidget);
- virtual FX_BOOL Delete(IXFA_Widget* hWidget);
- virtual FX_BOOL DeSelect(IXFA_Widget* hWidget);
- virtual FX_BOOL CanUndo(IXFA_Widget* hWidget);
- virtual FX_BOOL CanRedo(IXFA_Widget* hWidget);
- virtual FX_BOOL Undo(IXFA_Widget* hWidget);
- virtual FX_BOOL Redo(IXFA_Widget* hWidget);
- virtual FX_BOOL GetSuggestWords(IXFA_Widget* hWidget,
- CFX_PointF pointf,
- CFX_ByteStringArray& sSuggest);
- virtual FX_BOOL ReplaceSpellCheckWord(IXFA_Widget* hWidget,
- CFX_PointF pointf,
- const CFX_ByteStringC& bsReplace);
-};
-#endif
+// 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 _FXFA_FORMFILLER_ANNOTHANDLER_IMP_H
+#define _FXFA_FORMFILLER_ANNOTHANDLER_IMP_H
+class CXFA_FFDocView;
+class CXFA_FFWidgetHandler : public IXFA_WidgetHandler {
+ public:
+ CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView);
+ ~CXFA_FFWidgetHandler();
+ virtual IXFA_Widget* CreateWidget(IXFA_Widget* hParent,
+ XFA_WIDGETTYPE eType,
+ IXFA_Widget* hBefore = NULL);
+ virtual IXFA_PageView* GetPageView(IXFA_Widget* hWidget);
+ virtual void GetRect(IXFA_Widget* hWidget, CFX_RectF& rt);
+ virtual FX_DWORD GetStatus(IXFA_Widget* hWidget);
+ virtual FX_BOOL GetBBox(IXFA_Widget* hWidget,
+ CFX_RectF& rtBox,
+ FX_DWORD dwStatus,
+ FX_BOOL bDrawFocus = FALSE);
+ virtual CXFA_WidgetAcc* GetDataAcc(IXFA_Widget* hWidget);
+ virtual void GetName(IXFA_Widget* hWidget,
+ CFX_WideString& wsName,
+ int32_t iNameType = 0);
+ virtual FX_BOOL GetToolTip(IXFA_Widget* hWidget, CFX_WideString& wsToolTip);
+ virtual void SetPrivateData(IXFA_Widget* hWidget,
+ void* module_id,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback);
+ virtual void* GetPrivateData(IXFA_Widget* hWidget, void* module_id);
+ virtual FX_BOOL OnMouseEnter(IXFA_Widget* hWidget);
+ virtual FX_BOOL OnMouseExit(IXFA_Widget* hWidget);
+ virtual FX_BOOL OnLButtonDown(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonUp(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnLButtonDblClk(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnMouseMove(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnMouseWheel(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ int16_t zDelta,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDown(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonUp(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+ virtual FX_BOOL OnRButtonDblClk(IXFA_Widget* hWidget,
+ FX_DWORD dwFlags,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+
+ virtual FX_BOOL OnKeyDown(IXFA_Widget* hWidget,
+ FX_DWORD dwKeyCode,
+ FX_DWORD dwFlags);
+ virtual FX_BOOL OnKeyUp(IXFA_Widget* hWidget,
+ FX_DWORD dwKeyCode,
+ FX_DWORD dwFlags);
+ virtual FX_BOOL OnChar(IXFA_Widget* hWidget,
+ FX_DWORD dwChar,
+ FX_DWORD dwFlags);
+ virtual FX_DWORD OnHitTest(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy);
+ virtual FX_BOOL OnSetCursor(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy);
+ virtual void RenderWidget(IXFA_Widget* hWidget,
+ CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix = NULL,
+ FX_BOOL bHighlight = FALSE);
+ virtual FX_BOOL HasEvent(CXFA_WidgetAcc* pWidgetAcc,
+ XFA_EVENTTYPE eEventType);
+ virtual int32_t ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
+ CXFA_EventParam* pParam);
+
+ protected:
+ CXFA_Node* CreateWidgetFormItem(XFA_WIDGETTYPE eType,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const;
+
+ CXFA_Node* CreatePushButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateCheckButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateExclGroup(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateRadioButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateDatetimeEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateDecimalField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateNumericField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateSignature(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateTextEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateDropdownList(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateListBox(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateImageField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreatePasswordEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateField(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const;
+ CXFA_Node* CreateArc(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateRectangle(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateImage(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateLine(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateText(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateDraw(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const;
+
+ CXFA_Node* CreateSubform(CXFA_Node* pParent, CXFA_Node* pBefore) const;
+ CXFA_Node* CreateFormItem(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const;
+ CXFA_Node* CreateCopyNode(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore = NULL) const;
+ CXFA_Node* CreateTemplateNode(XFA_ELEMENT eElement,
+ CXFA_Node* pParent,
+ CXFA_Node* pBefore) const;
+ CXFA_Node* CreateFontNode(CXFA_Node* pParent) const;
+ CXFA_Node* CreateMarginNode(CXFA_Node* pParent,
+ FX_DWORD dwFlags,
+ FX_FLOAT fInsets[4]) const;
+ CXFA_Node* CreateValueNode(XFA_ELEMENT eValue, CXFA_Node* pParent) const;
+ IXFA_ObjFactory* GetObjFactory() const;
+ CXFA_Document* GetXFADoc() const;
+
+ CXFA_FFDocView* m_pDocView;
+};
+class CXFA_FFMenuHandler : public IXFA_MenuHandler {
+ public:
+ CXFA_FFMenuHandler();
+ ~CXFA_FFMenuHandler();
+ virtual FX_BOOL CanCopy(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanCut(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanPaste(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanSelectAll(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanDelete(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanDeSelect(IXFA_Widget* hWidget);
+ virtual FX_BOOL Copy(IXFA_Widget* hWidget, CFX_WideString& wsText);
+ virtual FX_BOOL Cut(IXFA_Widget* hWidget, CFX_WideString& wsText);
+ virtual FX_BOOL Paste(IXFA_Widget* hWidget, const CFX_WideString& wsText);
+ virtual FX_BOOL SelectAll(IXFA_Widget* hWidget);
+ virtual FX_BOOL Delete(IXFA_Widget* hWidget);
+ virtual FX_BOOL DeSelect(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanUndo(IXFA_Widget* hWidget);
+ virtual FX_BOOL CanRedo(IXFA_Widget* hWidget);
+ virtual FX_BOOL Undo(IXFA_Widget* hWidget);
+ virtual FX_BOOL Redo(IXFA_Widget* hWidget);
+ virtual FX_BOOL GetSuggestWords(IXFA_Widget* hWidget,
+ CFX_PointF pointf,
+ CFX_ByteStringArray& sSuggest);
+ virtual FX_BOOL ReplaceSpellCheckWord(IXFA_Widget* hWidget,
+ CFX_PointF pointf,
+ const CFX_ByteStringC& bsReplace);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_fontmgr.cpp b/xfa/src/fxfa/src/app/xfa_fontmgr.cpp
index 0c3f636dd2..3bc03872df 100644
--- a/xfa/src/fxfa/src/app/xfa_fontmgr.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fontmgr.cpp
@@ -1,2093 +1,2093 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fontmgr.h"
-#include "xfa_ffdoc.h"
-#include "xfa_ffConfigAcc.h"
-#include "xfa_ffapp.h"
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-static const XFA_FONTINFO g_XFAFontsMap[] = {
- {0x01d5d33e, L"SimSun", L"Arial", 0, 936},
- {0x01e4f102, L"YouYuan", L"Arial", 1, 936},
- {0x030549dc, L"LiSu", L"Arial", 1, 936},
- {0x032edd44, L"Simhei", L"Arial", 1, 936},
- {0x03eac6fc, L"PoorRichard-Regular", L"Arial", 2, 1252},
- {0x03ed90e6, L"Nina", L"Arial", 0, 1252},
- {0x077b56b3, L"KingsoftPhoneticPlain", L"Arial", 0, 1252},
- {0x078ed524, L"MicrosoftSansSerif", L"Arial", 0, 1252},
- {0x089b18a9, L"Arial", L"Arial", 0, 1252},
- {0x0b2cad72, L"MonotypeCorsiva", L"Arial", 8, 1252},
- {0x0bb003e7, L"Kartika", L"Arial", 2, 1252},
- {0x0bb469df, L"VinerHandITC", L"Arial", 8, 1252},
- {0x0bc1a851, L"SegoeUI", L"Arial", 0, 1252},
- {0x0c112ebd, L"KozukaGothicPro-VIM", L"Arial", 0, 1252},
- {0x0cfcb9c1, L"AdobeThai", L"Kokila,Arial Narrow", 0, 847},
- {0x0e7de0f9, L"Playbill", L"Arial", 0, 1252},
- {0x0eff47c3, L"STHupo", L"Arial", 0, 936},
- {0x107ad374, L"Constantia", L"Arial", 2, 1252},
- {0x12194c2d, L"KunstlerScript", L"Arial", 8, 1252},
- {0x135ef6a1, L"MinionProSmBd",
- L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
- {0x158c4049, L"Garamond", L"Arial", 2, 1252},
- {0x160ecb24, L"STZhongsong", L"Arial", 0, 936},
- {0x161ed07e, L"MSGothic", L"Arial", 1, 1252},
- {0x171d1ed1, L"SnapITC-Regular", L"Arial", 0, 1252},
- {0x18d1188f, L"Cambria", L"Arial", 2, 1252},
- {0x18eaf350, L"ArialUnicodeMS", L"Arial", 0, 936},
- {0x1a92d115, L"MingLiU", L"Arial", 1, 1252},
- {0x1cc217c6, L"TrebuchetMS", L"Arial", 0, 1252},
- {0x1d649596, L"BasemicTimes", L"Arial", 0, 1252},
- {0x1e34ee60, L"BellMT", L"Arial", 2, 1252},
- {0x1eb36945, L"CooperBlack", L"Arial", 2, 1252},
- {0x1ef7787d, L"BatangChe", L"Arial", 1, 1252},
- {0x20b3bd3a, L"BrushScriptMT", L"Arial", 8, 1252},
- {0x220877aa, L"Candara", L"Arial", 0, 1252},
- {0x22135007, L"FreestyleScript-Regular", L"Arial", 8, 1252},
- {0x251059c3, L"Chiller", L"Arial", 0, 1252},
- {0x25bed6dd, L"MSReferenceSansSerif", L"Arial", 0, 1252},
- {0x28154c81, L"Parchment-Regular", L"Arial", 8, 1252},
- {0x29711eb9, L"STLiti", L"Arial", 0, 936},
- {0x2b1993b4, L"Basemic", L"Arial", 0, 1252},
- {0x2b316339, L"NiagaraSolid-Reg", L"Arial", 0, 1252},
- {0x2c147529, L"FootlightMTLight", L"Arial", 0, 1252},
- {0x2c198928, L"HarlowSolid", L"Arial", 0, 1252},
- {0x2c6ac6b2, L"LucidaBright", L"Arial", 2, 1252},
- {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"Arial", 0, 1252},
- {0x2d5a47b0, L"STCaiyun", L"Arial", 0, 936},
- {0x2def26bf, L"BernardMT-Condensed", L"Arial", 0, 1252},
- {0x2fd8930b, L"KozukaMinchoPr6NR", L"Arial", 0, 1252},
- {0x3115525a, L"FangSong_GB2312", L"Arial", 0, 1252},
- {0x31327817, L"MyriadPro",
- L"Calibri,Corbel,Candara,Cambria Math,Franklin Gothic Medium,Arial "
- L"Narrow,Times New Roman",
- 0, 1252},
- {0x32244975, L"Helvetica", L"Arial", 0, 1252},
- {0x32ac995c, L"Terminal", L"Arial", 0, 1252},
- {0x338d648a, L"NiagaraEngraved-Reg", L"Arial", 0, 1252},
- {0x33bb65f2, L"Sylfaen", L"Arial", 2, 1252},
- {0x3402c30e, L"MSPMincho", L"Arial", 2, 1252},
- {0x3412bf31, L"SimSun-PUA", L"Arial", 0, 936},
- {0x36eb39b9, L"BerlinSansFB", L"Arial", 0, 1252},
- {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
- {0x3864c4f6, L"HighTowerText", L"Arial", 2, 1252},
- {0x3a257d03, L"FangSong_GB2312", L"Arial", 0, 1252},
- {0x3cdae668, L"FreestyleScript", L"Arial", 8, 1252},
- {0x3d55aed7, L"Jokerman", L"Arial", 0, 1252},
- {0x3d5b4385, L"PMingLiU", L"Arial", 2, 1252},
- {0x3d9b7669, L"EstrangeloEdessa", L"Arial", 0, 1252},
- {0x3e532d74, L"FranklinGothicMedium", L"Arial", 0, 1252},
- {0x3e6aa32d, L"NSimSun", L"Arial", 1, 936},
- {0x3f6c36a8, L"Gautami", L"Arial", 0, 1252},
- {0x3ff32662, L"Chiller-Regular", L"Arial", 0, 1252},
- {0x409de312, L"ModernNo.20", L"Arial", 2, 1252},
- {0x41443c5e, L"Georgia", L"Arial", 2, 1252},
- {0x4160ade5, L"BellGothicStdBlack",
- L"Arial,Arial Unicode MS,Book Antiqua,Dotum,Georgia", 0, 1252},
- {0x421976c4, L"Modern-Regular", L"Arial", 2, 1252},
- {0x422a7252, L"Stencil", L"Arial", 0, 1252},
- {0x42c8554f, L"Fixedsys", L"Arial", 0, 1252},
- {0x435cb41d, L"Roman", L"Arial", 0, 1252},
- {0x47882383, L"CourierNew", L"Arial", 1, 1252},
- {0x480a2338, L"BerlinSansFBDemi", L"Arial", 0, 1252},
- {0x480bf7a4, L"CourierStd", L"Courier New,Verdana", 0, 1252},
- {0x481ad6ed, L"VladimirScript", L"Arial", 8, 1252},
- {0x4911577a, L"YouYuan", L"Arial", 1, 936},
- {0x4a788d72, L"STXingkai", L"Arial", 0, 936},
- {0x4bf88566, L"SegoeCondensed", L"Arial", 0, 1252},
- {0x4ccf51a4, L"BerlinSansFB-Reg", L"Arial", 0, 1252},
- {0x4ea967ce, L"GulimChe", L"Arial", 1, 1252},
- {0x4f68bd79, L"LetterGothicStd", L"Courier New,Verdana", 0, 1252},
- {0x51a0d0e6, L"KozukaGothicPr6NM", L"Arial", 0, 1252},
- {0x531b3dea, L"BasemicSymbol", L"Arial", 0, 1252},
- {0x5333fd39, L"CalifornianFB-Reg", L"Arial", 2, 1252},
- {0x53561a54, L"FZYTK--GBK1-0", L"Arial", 0, 936},
- {0x55e0dde6, L"LucidaSansTypewriter", L"Arial", 0, 1252},
- {0x574d4d3d, L"AdobeArabic", L"Arial Narrow", 0, 1252},
- {0x5792e759, L"STKaiti", L"Arial", 0, 936},
- {0x5921978e, L"LucidaSansUnicode", L"Arial", 0, 1252},
- {0x594e2da4, L"Vrinda", L"Arial", 0, 1252},
- {0x59baa9a2, L"KaiTi_GB2312", L"Arial", 0, 1252},
- {0x5cfedf4f, L"BaskOldFace", L"Arial", 0, 1252},
- {0x5f97921c, L"AdobeMyungjoStdM",
- L"Batang,Bookman Old Style,Consolas,STZhongsong", 0, 936},
- {0x5fefbfad, L"Batang", L"Arial", 2, 1252},
- {0x605342b9, L"DotumChe", L"Arial", 1, 1252},
- {0x608c5f9a, L"KaiTi_GB2312", L"Arial", 0, 936},
- {0x61efd0d1, L"MaturaMTScriptCapitals", L"Arial", 0, 1252},
- {0x626608a9, L"MVBoli", L"Arial", 0, 1252},
- {0x630501a3, L"SmallFonts", L"Arial", 0, 1252},
- {0x65d0e2a9, L"FZYTK--GBK1-0", L"Arial", 0, 936},
- {0x669f29e1, L"FZSTK--GBK1-0", L"Arial", 0, 936},
- {0x673a9e5f, L"Tunga", L"Arial", 0, 1252},
- {0x691aa4ce, L"NiagaraSolid", L"Arial", 0, 1252},
- {0x696259b7, L"Corbel", L"Arial", 0, 1252},
- {0x696ee9be, L"STXihei", L"Arial", 0, 936},
- {0x6c59cf69, L"Dotum", L"Arial", 0, 1252},
- {0x707fa561, L"Gungsuh", L"Arial", 2, 1252},
- {0x71416bb2, L"ZWAdobeF", L"Arial", 0, 1252},
- {0x71b41801, L"Verdana", L"Arial", 0, 1252},
- {0x73f25e4c, L"PalatinoLinotype", L"Arial", 0, 1252},
- {0x73f4d19f, L"NiagaraEngraved", L"Arial", 0, 1252},
- {0x74001694, L"MyriadProBlack", L"Book Antiqua,Constantia,Dotum,Georgia", 0,
- 1252},
- {0x74b14d8f, L"Haettenschweiler", L"Arial", 0, 1252},
- {0x74cb44ee, L"NSimSun", L"Arial", 1, 936},
- {0x76b4d7ff, L"Shruti", L"Arial", 0, 1252},
- {0x788b3533, L"Webdings", L"Arial", 6, 42},
- {0x797dde99, L"MSSerif", L"Arial", 0, 1252},
- {0x7a0f9e9e, L"MSMincho", L"Arial", 1, 1252},
- {0x7b439caf, L"OldEnglishTextMT", L"Arial", 0, 1252},
- {0x8213a433, L"LucidaSans-Typewriter", L"Arial", 0, 1252},
- {0x82fec929, L"AdobeSongStdL",
- L"Centaur,Calibri,STSong,Bell MT,Garamond,Times New Roman", 0, 936},
- {0x83581825, L"Modern", L"Arial", 0, 1252},
- {0x835a2823, L"Algerian", L"Arial", 0, 1252},
- {0x83dab9f5, L"Script", L"Arial", 0, 1252},
- {0x847b56da, L"Tahoma", L"Arial", 0, 1252},
- {0x8a783cb2, L"SimSun-PUA", L"Arial", 0, 1252},
- {0x8b5cac0e, L"Onyx", L"Arial", 0, 1252},
- {0x8c6a499e, L"Gulim", L"Arial", 0, 1252},
- {0x8e0af790, L"JuiceITC", L"Arial", 0, 1252},
- {0x8e8d43b2, L"Centaur", L"Arial", 2, 1252},
- {0x8ee4dcca, L"BookshelfSymbol7", L"Arial", 0, 1252},
- {0x90794800, L"BellGothicStdLight", L"Bell MT,Calibri,Times New Roman", 0,
- 1252},
- {0x909b516a, L"Century", L"Arial", 2, 1252},
- {0x92ae370d, L"MSOutlook", L"Arial", 4, 42},
- {0x93c9fbf1, L"LucidaFax", L"Arial", 2, 1252},
- {0x9565085e, L"BookAntiqua", L"Arial", 2, 1252},
- {0x9856d95d, L"AdobeMingStdL", L"Arial,Arial Unicode MS,Cambria,BatangChe",
- 0, 949},
- {0x9bbadd6b, L"ColonnaMT", L"Arial", 0, 1252},
- {0x9cbd16a4, L"ShowcardGothic-Reg", L"Arial", 0, 1252},
- {0x9d73008e, L"MSSansSerif", L"Arial", 0, 1252},
- {0xa0607db1, L"GungsuhChe", L"Arial", 1, 1252},
- {0xa0bcf6a1, L"LatinWide", L"Arial", 2, 1252},
- {0xa1429b36, L"Symbol", L"Arial", 6, 42},
- {0xa1fa5abc, L"Wingdings2", L"Arial", 6, 42},
- {0xa1fa5abd, L"Wingdings3", L"Arial", 6, 42},
- {0xa427bad4, L"InformalRoman-Regular", L"Arial", 8, 1252},
- {0xa8b92ece, L"FZSTK--GBK1-0", L"Arial", 0, 936},
- {0xa8d83ece, L"CalifornianFB", L"Arial", 2, 1252},
- {0xaa3e082c, L"Kingsoft-Phonetic", L"Arial", 0, 1252},
- {0xaa6bcabe, L"HarlowSolidItalic", L"Arial", 0, 1252},
- {0xade5337c, L"MSUIGothic", L"Arial", 0, 1252},
- {0xb08dd941, L"WideLatin", L"Arial", 2, 1252},
- {0xb207f05d, L"PoorRichard", L"Arial", 2, 1252},
- {0xb3bc492f, L"JuiceITC-Regular", L"Arial", 0, 1252},
- {0xb5545399, L"Marlett", L"Arial", 4, 42},
- {0xb5dd1ebb, L"BritannicBold", L"Arial", 0, 1252},
- {0xb699c1c5, L"LucidaCalligraphy-Italic", L"Arial", 0, 1252},
- {0xb725d629, L"TimesNewRoman", L"Arial", 2, 1252},
- {0xb7eaebeb, L"AdobeHeitiStdR", L"Batang,Century,Dotum", 0, 936},
- {0xbd29c486, L"BerlinSansFBDemi-Bold", L"Arial", 0, 1252},
- {0xbe8a8db4, L"BookshelfSymbolSeven", L"Arial", 0, 1252},
- {0xc16c0118, L"AdobeHebrew", L"Bell MT,Berlin Sans FB,Calibri", 0, 1252},
- {0xc318b0af, L"MyriadProLight", L"Calibri,STFangsong,Times New Roman", 0,
- 1252},
- {0xc65e5659, L"CambriaMath", L"Arial", 2, 1252},
- {0xc75c8f05, L"LucidaConsole", L"Arial", 1, 1252},
- {0xca7c35d6, L"Calibri", L"Arial", 0, 1252},
- {0xcb053f53, L"MicrosoftYaHei", L"Arial", 0, 936},
- {0xcb7190f9, L"Magneto-Bold", L"Arial", 0, 1252},
- {0xcca00cc5, L"System", L"Arial", 0, 1252},
- {0xccad6f76, L"Jokerman-Regular", L"Arial", 0, 1252},
- {0xccc5818c, L"EuroSign", L"Arial", 0, 1252},
- {0xcf3d7234, L"LucidaHandwriting-Italic", L"Arial", 0, 1252},
- {0xcf7b8fdb, L"MinionPro",
- L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
- {0xcfe5755f, L"Simhei", L"Arial", 1, 936},
- {0xd011f4ee, L"MSPGothic", L"Arial", 0, 1252},
- {0xd060e7ef, L"Vivaldi", L"Arial", 8, 1252},
- {0xd07edec1, L"FranklinGothic-Medium", L"Arial", 0, 1252},
- {0xd107243f, L"SimSun", L"Arial", 0, 936},
- {0xd1881562, L"ArialNarrow", L"Arial Narrow", 0, 1252},
- {0xd22b7dce, L"BodoniMTPosterCompressed", L"Arial", 0, 1252},
- {0xd22bfa60, L"ComicSansMS", L"Arial", 8, 1252},
- {0xd3bd0e35, L"Bauhaus93", L"Arial", 0, 1252},
- {0xd429ee7a, L"STFangsong", L"Arial", 0, 936},
- {0xd6679c12, L"BernardMTCondensed", L"Arial", 0, 1252},
- {0xd8e8a027, L"LucidaSans", L"Arial", 0, 1252},
- {0xd9fe7761, L"HighTowerText-Reg", L"Arial", 2, 1252},
- {0xda7e551e, L"STSong", L"Arial", 0, 936},
- {0xdaa6842d, L"STZhongsong", L"Arial", 0, 936},
- {0xdaaab93f, L"STFangsong", L"Arial", 0, 936},
- {0xdaeb0713, L"STSong", L"Arial", 0, 936},
- {0xdafedbef, L"STCaiyun", L"Arial", 0, 936},
- {0xdb00a3d9, L"Broadway", L"Arial", 0, 1252},
- {0xdb1f5ad4, L"STXinwei", L"Arial", 0, 936},
- {0xdb326e7f, L"STKaiti", L"Arial", 0, 936},
- {0xdb69595a, L"STHupo", L"Arial", 0, 936},
- {0xdba0082c, L"STXihei", L"Arial", 0, 936},
- {0xdbd0ab18, L"STXingkai", L"Arial", 0, 936},
- {0xdc1a7db1, L"STLiti", L"Arial", 0, 936},
- {0xdc33075f, L"KristenITC-Regular", L"Arial", 8, 1252},
- {0xdcc7009c, L"Harrington", L"Arial", 0, 1252},
- {0xdd712466, L"ArialBlack", L"Arial", 0, 1252},
- {0xdde87b3e, L"Impact", L"Arial", 0, 1252},
- {0xdf69fb32, L"SnapITC", L"Arial", 0, 1252},
- {0xdf8b25e8, L"CenturyGothic", L"Arial", 0, 1252},
- {0xe0f705c0, L"KristenITC", L"Arial", 8, 1252},
- {0xe1427573, L"Raavi", L"Arial", 0, 1252},
- {0xe2cea0cb, L"Magneto", L"Arial", 0, 1252},
- {0xe36a9e17, L"Ravie", L"Arial", 0, 1252},
- {0xe433f8e2, L"Parchment", L"Arial", 8, 1252},
- {0xe43dff4a, L"Wingdings", L"Arial", 4, 42},
- {0xe4e2c405, L"MTExtra", L"Arial", 6, 42},
- {0xe618cc35, L"InformalRoman", L"Arial", 8, 1252},
- {0xe6c27ffc, L"Mistral", L"Arial", 8, 1252},
- {0xe7ebf4b9, L"Courier", L"Courier New", 0, 1252},
- {0xe8bc4a9d, L"MSReferenceSpecialty", L"Arial", 0, 1252},
- {0xe90fb013, L"TempusSansITC", L"Arial", 0, 1252},
- {0xec637b42, L"Consolas", L"Verdana", 1, 1252},
- {0xed3a683b, L"STXinwei", L"Arial", 0, 936},
- {0xef264cd1, L"LucidaHandwriting", L"Arial", 0, 1252},
- {0xf086bca2, L"BaskervilleOldFace", L"Arial", 0, 1252},
- {0xf1028030, L"Mangal", L"Arial", 2, 1252},
- {0xf1da7eb9, L"ShowcardGothic", L"Arial", 0, 1252},
- {0xf210f06a, L"ArialMT", L"Arial", 0, 1252},
- {0xf477f16a, L"Latha", L"Arial", 0, 1252},
- {0xf616f3dd, L"LiSu", L"Arial", 1, 936},
- {0xfa479aa6, L"MicrosoftYaHei", L"Arial", 0, 936},
- {0xfcd19697, L"BookmanOldStyle", L"Arial", 0, 1252},
- {0xfe209a82, L"LucidaCalligraphy", L"Arial", 0, 1252},
- {0xfef135f8, L"AdobeHeitiStd-Regular", L"Batang,Century,Dotum", 0, 936},
-};
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
-static const XFA_FONTINFO g_XFAFontsMap[] = {
- {0x01d5d33e, L"SimSun",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
- L"PL UMing TW MBE",
- 0, 936},
- {0x01e4f102, L"YouYuan",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
- L"PL UMing TW MBE",
- 1, 936},
- {0x030549dc, L"LiSu",
- L"WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei "
- L"Mono,WenQuanYi Micro Hei",
- 1, 936},
- {0x032edd44, L"Simhei",
- L"WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei "
- L"Mono,WenQuanYi Micro Hei",
- 1, 936},
- {0x03eac6fc, L"PoorRichard-Regular", L"Droid Sans Japanese,FreeSerif", 2,
- 1252},
- {0x03ed90e6, L"Nina", L"FreeSerif", 0, 1252},
- {0x077b56b3, L"KingsoftPhoneticPlain",
- L"Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans Thai,Droid Sans "
- L"Armenian,Untitled1,utkal,Lohit Oriya",
- 0, 1252},
- {0x078ed524, L"MicrosoftSansSerif",
- L"Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei", 0, 1252},
- {0x089b18a9, L"Arial",
- L"Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif,WenQuanYi Micro Hei",
- 0, 1252},
- {0x0b2cad72, L"MonotypeCorsiva", L"Droid Sans Japanese,FreeSerif", 8, 1252},
- {0x0bb003e7, L"Kartika",
- L"FreeSans,Liberation Sans,Liberation Sans Narrow,Nimbus Sans "
- L"L,Garuda,FreeSerif,WenQuanYi Micro Hei",
- 2, 1252},
- {0x0bb469df, L"VinerHandITC",
- L"Droid Sans Japanese,Ubuntu,Liberation Sans,Liberation Serif", 8, 1252},
- {0x0bc1a851, L"SegoeUI", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
- {0x0c112ebd, L"KozukaGothicPro-VIM", L"FreeSerif", 0, 1252},
- {0x0cfcb9c1, L"AdobeThai", L"Droid Sans Japanese,Waree", 0, 847},
- {0x0e7de0f9, L"Playbill",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
- L"Sans Ethiopic,Droid Sans Japanese,FreeSerif",
- 0, 1252},
- {0x0eff47c3, L"STHupo", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0x107ad374, L"Constantia",
- L"Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei,Ubuntu", 2, 1252},
- {0x12194c2d, L"KunstlerScript", L"Droid Sans Japanese,Liberation Serif", 8,
- 1252},
- {0x135ef6a1, L"MinionProSmBd", L"Liberation Serif", 0, 1252},
- {0x158c4049, L"Garamond",
- L"Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 2, 1252},
- {0x160ecb24, L"STZhongsong",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x161ed07e, L"MSGothic",
- L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,AR PL "
- L"UMing CN,AR PL UMing HK,AR PL UMing TW",
- 1, 1252},
- {0x171d1ed1, L"SnapITC-Regular",
- L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Sans", 0,
- 1252},
- {0x18d1188f, L"Cambria", L"Droid Sans Japanese,FreeSerif,FreeMono", 2,
- 1252},
- {0x18eaf350, L"ArialUnicodeMS",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x1a92d115, L"MingLiU",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 1, 1252},
- {0x1cc217c6, L"TrebuchetMS",
- L"Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0, 1252},
- {0x1d649596, L"BasemicTimes",
- L"Liberation Serif,Times New Roman,Droid Sans Japanese,FreeSerif,Ubuntu",
- 0, 1252},
- {0x1e34ee60, L"BellMT",
- L"KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252},
- {0x1eb36945, L"CooperBlack",
- L"KacstQurn,Droid Sans Japanese,FreeMono,Liberation Mono, WenQuanYi Micro "
- L"Hei Mono",
- 2, 1252},
- {0x1ef7787d, L"BatangChe",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing "
- L"TW,WenQuanYi Zen Hei,WenQuanYi Micro Hei",
- 1, 1252},
- {0x20b3bd3a, L"BrushScriptMT",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
- L"Japanese,URW Chancery L,Liberation Sans",
- 8, 1252},
- {0x220877aa, L"Candara", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
- {0x22135007, L"FreestyleScript-Regular",
- L"KacstQurn,Droid Sans Japanese,Liberation Sans", 8, 1252},
- {0x251059c3, L"Chiller",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
- L"Japanese,Liberation Sans",
- 0, 1252},
- {0x25bed6dd, L"MSReferenceSansSerif",
- L"DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,AR PL UKai "
- L"HK",
- 0, 1252},
- {0x28154c81, L"Parchment-Regular", L"Droid Sans Japanese,Liberation Sans",
- 8, 1252},
- {0x29711eb9, L"STLiti", L"AR PL UKai HK", 0, 936},
- {0x2b1993b4, L"Basemic",
- L"Liberation Serif,Droid Sans Japanese,Liberation Sans", 0, 1252},
- {0x2b316339, L"NiagaraSolid-Reg", L"Droid Sans Japanese,Liberation Sans", 0,
- 1252},
- {0x2c147529, L"FootlightMTLight",
- L"KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252},
- {0x2c198928, L"HarlowSolid",
- L"KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252},
- {0x2c6ac6b2, L"LucidaBright",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
- L"Sans Japanese,Liberation Sans",
- 2, 1252},
- {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"DejaVu Sans", 0, 1252},
- {0x2d5a47b0, L"STCaiyun", L"AR PL UKai HK", 0, 936},
- {0x2def26bf, L"BernardMT-Condensed",
- L"KacstQurn,Droid Sans Japanese,DejaVu Serif", 0, 1252},
- {0x2fd8930b, L"KozukaMinchoPr6NR", L"DejaVu Serif", 0, 1252},
- {0x3115525a, L"FangSong_GB2312",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 1252},
- {0x31327817, L"MyriadPro",
- L"Ubuntu Condensed,Droid Sans Japanese, FreeSerif", 0, 1252},
- {0x32244975, L"Helvetica",
- L"Ubuntu,DejaVu Sans Condensed,Liberation Sans,Liberation Sans "
- L"Narrow,Nimbus Sans L",
- 0, 1252},
- {0x32ac995c, L"Terminal", L"DejaVu Serif", 0, 1252},
- {0x338d648a, L"NiagaraEngraved-Reg", L"Droid Sans Japanese,DejaVu Serif", 0,
- 1252},
- {0x33bb65f2, L"Sylfaen", L"Droid Sans Japanese,DejaVu Sans", 2, 1252},
- {0x3402c30e, L"MSPMincho",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 2,
- 1252},
- {0x3412bf31, L"SimSun-PUA",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing CN,AR PL UMing HK", 0,
- 936},
- {0x36eb39b9, L"BerlinSansFB",
- L"Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0, 1252},
- {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
- {0x3864c4f6, L"HighTowerText", L"Droid Sans Japanese,DejaVu Serif", 2,
- 1252},
- {0x3a257d03, L"FangSong_GB2312",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei", 0, 1252},
- {0x3c7d1d07, L"Garamond3LTStd",
- L"Droid Sans Japanese,Ubuntu Condensed,DejaVu Sans Condensed,Liberation "
- L"Serif,Ubuntu,FreeSerif",
- 2, 1252},
- {0x3cdae668, L"FreestyleScript",
- L"KacstQurn,Droid Sans Japanese,DejaVu Sans", 8, 1252},
- {0x3d55aed7, L"Jokerman", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
- {0x3d5b4385, L"PMingLiU",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 2, 1252},
- {0x3d9b7669, L"EstrangeloEdessa", L"Droid Sans Japanese,DejaVu Sans", 0,
- 1252},
- {0x3e532d74, L"FranklinGothicMedium", L"Droid Sans Japanese,Ubuntu", 0,
- 1252},
- {0x3e6aa32d, L"NSimSun",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 1, 936},
- {0x3f6c36a8, L"Gautami",
- L"Droid Arabic Naskh,Droid Sans Ethiopic, mry_KacstQurn,Droid Sans "
- L"Japanese,FreeSans",
- 0, 1252},
- {0x3ff32662, L"Chiller-Regular",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,FreeSans", 0, 1252},
- {0x409de312, L"ModernNo.20",
- L"KacstQurn,Droid Sans Japanese,Nimbus Sans L,Nimbus Sans L,FreeSans", 2,
- 1252},
- {0x41443c5e, L"Georgia", L"Droid Sans Japanese,FreeSans", 2, 1252},
- {0x4160ade5, L"BellGothicStdBlack", L"FreeSans", 0, 1252},
- {0x421976c4, L"Modern-Regular", L"FreeSans", 2, 1252},
- {0x422a7252, L"Stencil", L"Droid Sans Japanese,FreeSans,Liberation Sans", 0,
- 1252},
- {0x42c8554f, L"Fixedsys", L"FreeSerif", 0, 1252},
- {0x435cb41d, L"Roman", L"FreeSerif", 0, 1252},
- {0x47882383, L"CourierNew",
- L"FreeMono,WenQuanYi Micro Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL "
- L"UKai TW,AR PL UKai TW MBE,DejaVu Sans",
- 1, 1252},
- {0x480a2338, L"BerlinSansFBDemi", L"Droid Sans Japanese,Liberation Serif",
- 0, 1252},
- {0x480bf7a4, L"CourierStd", L"DejaVu Sans", 0, 1252},
- {0x481ad6ed, L"VladimirScript", L"Droid Sans Japanese,DejaVu Serif", 8,
- 1252},
- {0x4911577a, L"YouYuan",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
- 936},
- {0x4a788d72, L"STXingkai", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0x4bf88566, L"SegoeCondensed", L"FreeSerif", 0, 1252},
- {0x4ccf51a4, L"BerlinSansFB-Reg", L"Droid Sans Japanese,Liberation Serif",
- 0, 1252},
- {0x4ea967ce, L"GulimChe",
- L"WenQuanYi Zen Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL "
- L"UKai TW MBE",
- 1, 1252},
- {0x4f68bd79, L"LetterGothicStd",
- L"FreeMono,Liberation Mono,Andale Mono,WenQuanYi Micro Hei Mono", 0, 1252},
- {0x51a0d0e6, L"KozukaGothicPr6NM", L"FreeSerif", 0, 1252},
- {0x531b3dea, L"BasemicSymbol", L"FreeSerif", 0, 1252},
- {0x5333fd39, L"CalifornianFB-Reg",
- L"Droid Sans Japanese,URW Chancery L,FreeSerif", 2, 1252},
- {0x53561a54, L"FZYTK--GBK1-0",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x55e0dde6, L"LucidaSansTypewriter",
- L"Ubuntu Mono,DejaVu Sans Mono,Nimbus Mono L,Liberation Mono,Courier 10 "
- L"Pitch,FreeMono",
- 0, 1252},
- {0x574d4d3d, L"AdobeArabic", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
- {0x5792e759, L"STKaiti", L"WenQuanYi Micro Hei Mono", 0, 936},
- {0x5921978e, L"LucidaSansUnicode", L"Droid Sans Japanese,DejaVu Sans", 0,
- 1252},
- {0x594e2da4, L"Vrinda",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Arabic "
- L"Naskh,mry_KacstQurn,Droid Sans Japanese,FreeSans,FreeSerif",
- 0, 1252},
- {0x59baa9a2, L"KaiTi_GB2312",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 1252},
- {0x5cfedf4f, L"BaskOldFace",
- L"KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 0, 1252},
- {0x5e16ac91, L"TrajanPro",
- L"Nimbus Sans L,AR PL UMing HK,AR PL UKai HK,AR PL UMing TW,AR PL UMing "
- L"TW MBE,DejaVu Sans,DejaVu Serif",
- 0, 1252},
- {0x5f388196, L"ITCLegacySansStdMedium",
- L"Liberation Serif,FreeSerif,FreeSans,Ubuntu", 0, 1252},
- {0x5f97921c, L"AdobeMyungjoStdM",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x5fefbfad, L"Batang",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 2, 1252},
- {0x605342b9, L"DotumChe",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
- 1252},
- {0x608c5f9a, L"KaiTi_GB2312",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x61efd0d1, L"MaturaMTScriptCapitals",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
- L"Sans Japanese,DejaVu Serif,DejaVu Sans",
- 0, 1252},
- {0x626608a9, L"MVBoli",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
- L"Ethiopic,Droid Sans Japanese,DejaVu Sans",
- 0, 1252},
- {0x630501a3, L"SmallFonts", L"DejaVu Serif", 0, 1252},
- {0x65d0e2a9, L"FZYTK--GBK1-0",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x669f29e1, L"FZSTK--GBK1-0",
- L"AR PL UMing CN,AR PL UKai CN, AR PL UMing HK", 0, 936},
- {0x673a9e5f, L"Tunga",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
- L"Japanese,DejaVu Serif",
- 0, 1252},
- {0x691aa4ce, L"NiagaraSolid", L"Droid Sans Japanese,DejaVu Serif", 0, 1252},
- {0x696259b7, L"Corbel", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
- {0x696ee9be, L"STXihei", L"WenQuanYi Micro Hei Mono", 0, 936},
- {0x6c59cf69, L"Dotum", L"WenQuanYi Zen Hei Mono", 0, 1252},
- {0x707fa561, L"Gungsuh", L"WenQuanYi Zen Hei Mono", 2, 1252},
- {0x71416bb2, L"ZWAdobeF",
- L"KacstArt,KacstBookm,KacstDecorative,KacstDigital,KacstFarsi,KacstLetter,"
- L"KacstOffice,Dingbats,FreeSerif",
- 0, 1252},
- {0x71b41801, L"Verdana",
- L"DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,DejaVu Sans",
- 0, 1252},
- {0x73f25e4c, L"PalatinoLinotype", L"Droid Sans Japanese,FreeSerif", 0,
- 1252},
- {0x73f4d19f, L"NiagaraEngraved", L"Droid Sans Japanese,FreeSerif", 0, 1252},
- {0x74001694, L"MyriadProBlack", L"Droid Sans Japanese,AR PL UKai HK", 0,
- 1252},
- {0x74b14d8f, L"Haettenschweiler", L"Droid Sans Japanese,DejaVu Serif", 0,
- 1252},
- {0x74cb44ee, L"NSimSun", L"WenQuanYi Zen Hei Mono", 1, 936},
- {0x76b4d7ff, L"Shruti",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
- L"Japanese,FreeSans",
- 0, 1252},
- {0x788b3533, L"Webdings", L"FreeSans", 6, 42},
- {0x797dde99, L"MSSerif", L"FreeSans", 0, 1252},
- {0x7a0f9e9e, L"MSMincho",
- L"WenQuanYi Micro Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW",
- 1, 1252},
- {0x7b439caf, L"OldEnglishTextMT",
- L"Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
- {0x8213a433, L"LucidaSans-Typewriter",
- L"Ubuntu Mono,Liberation Mono,DejaVu Sans Mono", 0, 1252},
- {0x82fec929, L"AdobeSongStdL",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0x83581825, L"Modern", L"FreeSans", 0, 1252},
- {0x835a2823, L"Algerian",
- L"KacstQurn,Droid Sans Japanese,FreeSans,Liberation Sans,Ubuntu", 0, 1252},
- {0x83dab9f5, L"Script", L"FreeSans", 0, 1252},
- {0x847b56da, L"Tahoma",
- L"Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif", 0, 1252},
- {0x8a783cb2, L"SimSun-PUA",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 1252},
- {0x8b5cac0e, L"Onyx", L"Droid Sans Japanese,Liberation Sans", 0, 1252},
- {0x8c6a499e, L"Gulim",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 1252},
- {0x8e0af790, L"JuiceITC", L"Droid Sans Japanese,Liberation Sans", 0, 1252},
- {0x8e8d43b2, L"Centaur",
- L"KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 2, 1252},
- {0x8ee4dcca, L"BookshelfSymbol7", L"Liberation Sans", 0, 1252},
- {0x90794800, L"BellGothicStdLight", L"Liberation Sans", 0, 1252},
- {0x909b516a, L"Century",
- L"Droid Sans Japanese,Liberation Sans,Liberation Mono,Liberation Serif", 2,
- 1252},
- {0x92ae370d, L"MSOutlook", L"Liberation Sans", 4, 42},
- {0x93c9fbf1, L"LucidaFax",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans "
- L"Ethiopic,mry_KacstQurn,Liberation Sans",
- 2, 1252},
- {0x9565085e, L"BookAntiqua",
- L"Droid Sans Japanese,Liberation Sans,Liberation Serif", 2, 1252},
- {0x9856d95d, L"AdobeMingStdL", L"AR PL UMing HK", 0, 949},
- {0x9bbadd6b, L"ColonnaMT",
- L"KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 0, 1252},
- {0x9cbd16a4, L"ShowcardGothic-Reg",
- L"Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
- {0x9d73008e, L"MSSansSerif", L"FreeSerif", 0, 1252},
- {0xa0607db1, L"GungsuhChe",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 1, 1252},
- {0xa0bcf6a1, L"LatinWide", L"FreeSerif", 2, 1252},
- {0xa1429b36, L"Symbol", L"FreeSerif", 6, 42},
- {0xa1fa5abc, L"Wingdings2", L"FreeSerif", 6, 42},
- {0xa1fa5abd, L"Wingdings3", L"FreeSerif", 6, 42},
- {0xa427bad4, L"InformalRoman-Regular",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
- L"Japanese,FreeSerif",
- 8, 1252},
- {0xa8b92ece, L"FZSTK--GBK1-0", L"AR PL UMing CN", 0, 936},
- {0xa8d83ece, L"CalifornianFB", L"Droid Sans Japanese,FreeSerif", 2, 1252},
- {0xaa3e082c, L"Kingsoft-Phonetic",
- L"Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans "
- L"Thai,utkal,Kedage,Mallige,AR PL UKai CN",
- 0, 1252},
- {0xaa6bcabe, L"HarlowSolidItalic",
- L"KacstQurn,Droid Sans Japanese,Liberation Serif", 0, 1252},
- {0xade5337c, L"MSUIGothic",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 1252},
- {0xb08dd941, L"WideLatin",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
- L"Sans Japanese,Liberation Serif",
- 2, 1252},
- {0xb12765e0, L"ITCLegacySansStdBook",
- L"AR PL UMing HK,AR PL UKai HK,FreeSerif,Ubuntu,FreeSans", 0, 1252},
- {0xb207f05d, L"PoorRichard", L"Droid Sans Japanese,Liberation Serif", 2,
- 1252},
- {0xb3bc492f, L"JuiceITC-Regular", L"Droid Sans Japanese,Liberation Serif",
- 0, 1252},
- {0xb5545399, L"Marlett", L"Liberation Serif", 4, 42},
- {0xb5dd1ebb, L"BritannicBold",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans "
- L"Ethiopic,mry_KacstQurn,Liberation Serif",
- 0, 1252},
- {0xb699c1c5, L"LucidaCalligraphy-Italic",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
- L"Sans Japanese,DejaVu Serif",
- 0, 1252},
- {0xb725d629, L"TimesNewRoman", L"Droid Sans Japanese,Liberation Sans", 2,
- 1252},
- {0xb7eaebeb, L"AdobeHeitiStdR",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0xbd29c486, L"BerlinSansFBDemi-Bold", L"Droid Sans Japanese,DejaVu Serif",
- 0, 1252},
- {0xbe8a8db4, L"BookshelfSymbolSeven", L"DejaVu Sans", 0, 1252},
- {0xc16c0118, L"AdobeHebrew", L"Droid Sans Japanese,Ubuntu,Liberation Serif",
- 0, 1252},
- {0xc318b0af, L"MyriadProLight",
- L"Droid Sans Japanese,AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 1252},
- {0xc65e5659, L"CambriaMath", L"Droid Sans Japanese,FreeSerif,FreeMono", 2,
- 1252},
- {0xc75c8f05, L"LucidaConsole",
- L"Liberation Mono,DejaVu Sans Mono,FreeMono,WenQuanYi Micro Hei Mono", 1,
- 1252},
- {0xca7c35d6, L"Calibri", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
- {0xcb053f53, L"MicrosoftYaHei",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0xcb7190f9, L"Magneto-Bold",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
- L"Japanese,DejaVu Serif",
- 0, 1252},
- {0xcca00cc5, L"System", L"DejaVu Sans", 0, 1252},
- {0xccad6f76, L"Jokerman-Regular", L"Droid Sans Japanese,DejaVu Sans", 0,
- 1252},
- {0xccc5818c, L"EuroSign", L"DejaVu Serif", 0, 1252},
- {0xcf3d7234, L"LucidaHandwriting-Italic",
- L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Serif", 0,
- 1252},
- {0xcf7b8fdb, L"MinionPro", L"DejaVu Sans", 0, 1252},
- {0xcfe5755f, L"Simhei",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 1, 936},
- {0xd011f4ee, L"MSPGothic",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 0,
- 1252},
- {0xd060e7ef, L"Vivaldi",
- L"KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 8, 1252},
- {0xd07edec1, L"FranklinGothic-Medium", L"Droid Sans Japanese,Ubuntu", 0,
- 1252},
- {0xd107243f, L"SimSun", L"WenQuanYi Zen Hei Mono", 0, 936},
- {0xd1881562, L"ArialNarrow",
- L"Liberation Sans Narrow,Droid Sans Japanese,FreeSerif", 0, 1252},
- {0xd22b7dce, L"BodoniMTPosterCompressed",
- L"Droid Sans Japanese,DejaVu Serif", 0, 1252},
- {0xd22bfa60, L"ComicSansMS",
- L"Droid Sans Japanese,FreeMono,Liberation Mono", 8, 1252},
- {0xd3bd0e35, L"Bauhaus93",
- L"KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
- {0xd429ee7a, L"STFangsong", L"WenQuanYi Micro Hei Mono", 0, 936},
- {0xd6679c12, L"BernardMTCondensed",
- L"KacstQurn,Droid Sans Japanese,Nimbus Sans L,URW Chancery "
- L"L,KacstOne,Liberation Sans",
- 0, 1252},
- {0xd8e8a027, L"LucidaSans",
- L"Liberation Sans Narrow,Nimbus Sans L,KacstQurn,Droid Arabic Naskh,Droid "
- L"Sans Ethiopic,DejaVu Serif Condensed,Liberation Mono,Ubuntu",
- 0, 1252},
- {0xd9fe7761, L"HighTowerText-Reg",
- L"Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252},
- {0xda7e551e, L"STSong", L"WenQuanYi Micro Hei Mono", 0, 936},
- {0xdaa6842d, L"STZhongsong",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0xdaaab93f, L"STFangsong",
- L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
- L"Hei,WenQuanYi Zen Hei Sharp",
- 0, 936},
- {0xdaeb0713, L"STSong",
- L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
- L"Hei,WenQuanYi Zen Hei Sharp",
- 0, 936},
- {0xdafedbef, L"STCaiyun", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0xdb00a3d9, L"Broadway",
- L"KacstQurn,Droid Sans Japanese,DejaVu Sans,FreeMono,Liberation Mono", 0,
- 1252},
- {0xdb1f5ad4, L"STXinwei", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0xdb326e7f, L"STKaiti",
- L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
- L"Hei,WenQuanYi Zen Hei Sharp",
- 0, 936},
- {0xdb69595a, L"STHupo",
- L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
- L"Hei,WenQuanYi Zen Hei Sharp",
- 0, 936},
- {0xdba0082c, L"STXihei",
- L" WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
- L"Hei,WenQuanYi Zen Hei Sharp",
- 0, 936},
- {0xdbd0ab18, L"STXingkai", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0xdc1a7db1, L"STLiti", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0xdc33075f, L"KristenITC-Regular",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans "
- L"Condensed,Ubuntu,Liberation Sans",
- 8, 1252},
- {0xdcc7009c, L"Harrington",
- L"KacstQurn,Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0,
- 1252},
- {0xdd712466, L"ArialBlack",
- L"Droid Sans Japanese,DejaVu Sans,DejaVu Serif,FreeMono", 0, 1252},
- {0xdde87b3e, L"Impact", L"Droid Sans Japanese,DejaVu Serif", 0, 1252},
- {0xdf69fb32, L"SnapITC",
- L"Liberation Sans Narrow,Ubuntu Condensed,DejaVu Sans,DejaVu "
- L"Serif,FreeMono",
- 0, 1252},
- {0xdf8b25e8, L"CenturyGothic",
- L"Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0,
- 1252},
- {0xe0f705c0, L"KristenITC",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans "
- L"Condensed,Ubuntu,Liberation Sans",
- 8, 1252},
- {0xe1427573, L"Raavi",
- L"Droid Arabic Naskh,Droid Sans "
- L"Ethiopic,mry_KacstQurn,FreeSerif,Liberation Serif,Khmer OS",
- 0, 1252},
- {0xe2cea0cb, L"Magneto",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu "
- L"Serif,DejaVu Serif Condensed,DejaVu Sans",
- 0, 1252},
- {0xe36a9e17, L"Ravie",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu "
- L"Serif,DejaVu Sans,FreeMono",
- 0, 1252},
- {0xe433f8e2, L"Parchment", L"Droid Sans Japanese,DejaVu Serif", 8, 1252},
- {0xe43dff4a, L"Wingdings", L"DejaVu Serif", 4, 42},
- {0xe4e2c405, L"MTExtra", L"DejaVu Serif", 6, 42},
- {0xe618cc35, L"InformalRoman",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
- L"Japanese,Nimbus Sans L,DejaVu Sans Condensed,Ubuntu,Liberation Sans",
- 8, 1252},
- {0xe6c27ffc, L"Mistral", L"Droid Sans Japanese,DejaVu Serif", 8, 1252},
- {0xe7ebf4b9, L"Courier", L"DejaVu Sans,DejaVu Sans Condensed,FreeSerif", 0,
- 1252},
- {0xe8bc4a9d, L"MSReferenceSpecialty", L"DejaVu Serif", 0, 1252},
- {0xe90fb013, L"TempusSansITC",
- L"Droid Sans Japanese,Ubuntu,Liberation Serif,FreeSerif", 0, 1252},
- {0xec637b42, L"Consolas",
- L"DejaVu Sans Condensed,AR PL UKai CN,AR PL UKai HK,AR PL UKai "
- L"TW,FreeSerif,FreeSans",
- 1, 1252},
- {0xed3a683b, L"STXinwei", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
- 936},
- {0xef264cd1, L"LucidaHandwriting",
- L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans "
- L"L,KacstQurn,Liberation Mono",
- 0, 1252},
- {0xf086bca2, L"BaskervilleOldFace",
- L"KacstQurn,Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0,
- 1252},
- {0xf1028030, L"Mangal",
- L"FreeSans,TSCu_Paranar,Garuda,Liberation Sans,Liberation Sans "
- L"Narrow,Nimbus Sans L",
- 2, 1252},
- {0xf1da7eb9, L"ShowcardGothic",
- L"Droid Sans Japanese,DejaVu Serif Condensed,DejaVu Sans "
- L"Condensed,Liberation Sans,Ubuntu",
- 0, 1252},
- {0xf210f06a, L"ArialMT",
- L"Liberation Sans,Liberation Sans Narrow,FreeSans,Nimbus Sans L,Khmer OS "
- L"System,Khmer OS",
- 0, 1252},
- {0xf477f16a, L"Latha",
- L"Liberation Sans Narrow,Nimbus Sans L,Droid Arabic "
- L"Naskh,mry_KacstQurn,FreeSerif,Nimbus Sans L",
- 0, 1252},
- {0xf616f3dd, L"LiSu",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
- L"PL UMing TW MBE",
- 1, 936},
- {0xfa479aa6, L"MicrosoftYaHei",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
- {0xfcd19697, L"BookmanOldStyle",
- L"Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0,
- 1252},
- {0xfe209a82, L"LucidaCalligraphy",
- L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
- L"Sans Japanese,DejaVu Serif,DejaVu Sans,FreeMono",
- 0, 1252},
- {0xfef135f8, L"AdobeHeitiStd-Regular",
- L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
- L"Sharp,WenQuanYi Micro Hei",
- 0, 936},
-};
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-static const XFA_FONTINFO g_XFAFontsMap[] = {
- {0x01d5d33e, L"SimSun", L"STHeiti,Heiti TC,STFangsong", 0, 936},
- {0x01e4f102, L"YouYuan", L"STHeiti,Heiti TC,STFangsong", 1, 936},
- {0x030549dc, L"LiSu", L"STHeiti,Heiti TC,STFangsong", 1, 936},
- {0x032edd44, L"Simhei", L"STHeiti,Heiti TC,STFangsong", 1, 936},
- {0x03eac6fc, L"PoorRichard-Regular",
- L"Noteworthy,Avenir Next Condensed,Impact", 2, 1252},
- {0x03ed90e6, L"Nina", L"Microsoft Sans Serif", 0, 1252},
- {0x077b56b3, L"KingsoftPhoneticPlain",
- L"LastResort,Apple "
- L"Chancery,STIXVariants,STIXSizeOneSym,STIXSizeOneSym,Apple Braille",
- 0, 1252},
- {0x078ed524, L"MicrosoftSansSerif", L"Songti SC,Apple Symbols", 0, 1252},
- {0x089b18a9, L"Arial",
- L"Arial Unicode MS,Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x0b2cad72, L"MonotypeCorsiva", L"Arial Narrow,Impact", 8, 1252},
- {0x0bb003e7, L"Kartika",
- L"Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Damascus", 2, 1252},
- {0x0bb469df, L"VinerHandITC", L"Comic Sans MS,Songti SC,STSong", 8, 1252},
- {0x0bc1a851, L"SegoeUI", L"Apple Symbols", 0, 1252},
- {0x0c112ebd, L"KozukaGothicPro-VIM", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0x0cfcb9c1, L"AdobeThai", L"Avenir Next Condensed Ultra Light", 0, 847},
- {0x0e7de0f9, L"Playbill", L"STIXNonUnicode", 0, 1252},
- {0x0eff47c3, L"STHupo", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
- {0x107ad374, L"Constantia", L"Arial Unicode MS,Palatino,Baskerville", 2,
- 1252},
- {0x12194c2d, L"KunstlerScript",
- L"Avenir Next Condensed Demi Bold,Arial Narrow", 8, 1252},
- {0x135ef6a1, L"MinionProSmBd", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x158c4049, L"Garamond", L"Impact,Arial Narrow", 2, 1252},
- {0x160ecb24, L"STZhongsong", L"STFangsong,Songti SC", 0, 936},
- {0x161ed07e, L"MSGothic",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing "
- L"TW,Microsoft Sans Serif,Apple Symbols",
- 1, 1252},
- {0x171d1ed1, L"SnapITC-Regular", L"STHeiti,Arial Black", 0, 1252},
- {0x18d1188f, L"Cambria", L"Arial Unicode MS", 2, 1252},
- {0x18eaf350, L"ArialUnicodeMS", L"Microsoft Sans Serif,Apple Symbols", 0,
- 936},
- {0x1a92d115, L"MingLiU", L"Heiti SC,STHeiti", 1, 1252},
- {0x1cc217c6, L"TrebuchetMS", L"Damascus,Impact,Arial Narrow", 0, 1252},
- {0x1d649596, L"BasemicTimes", L"Liberation Serif,Impact,Arial Narrow", 0,
- 1252},
- {0x1e34ee60, L"BellMT",
- L"Papyrus,STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 2, 1252},
- {0x1eb36945, L"CooperBlack",
- L"Marion,STIXNonUnicode,Arial Rounded MT Bold,Lucida Grande", 2, 1252},
- {0x1ef7787d, L"BatangChe",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,,AR PL UMing HK,AR PL UMing TW,AR "
- L"PL UMing TW MBE,Arial Unicode MS,Heiti TC",
- 1, 1252},
- {0x20b3bd3a, L"BrushScriptMT",
- L"STIXNonUnicode,Damascus,Arial Narrow,Avenir Next Condensed,Cochin", 8,
- 1252},
- {0x220877aa, L"Candara", L"Cochin,Baskerville,Marion", 0, 1252},
- {0x22135007, L"FreestyleScript-Regular",
- L"STIXNonUnicode,Nadeem,Zapf Dingbats", 8, 1252},
- {0x251059c3, L"Chiller",
- L"Zapf Dingbats,Damascus,STIXNonUnicode,Papyrus,KufiStandardGK,Baghdad", 0,
- 1252},
- {0x25bed6dd, L"MSReferenceSansSerif",
- L"Tahoma,Apple Symbols,Apple LiGothic,Arial Unicode MS,Lucida "
- L"Grande,Microsoft Sans Serif",
- 0, 1252},
- {0x28154c81, L"Parchment-Regular", L"Microsoft Sans Serif,Apple Symbols", 8,
- 1252},
- {0x29711eb9, L"STLiti", L"Kaiti SC,Songti SC", 0, 936},
- {0x2b1993b4, L"Basemic", L"Impact,Arial Narrow", 0, 1252},
- {0x2b316339, L"NiagaraSolid-Reg", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x2c147529, L"FootlightMTLight",
- L"STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans,Noteworthy", 0, 1252},
- {0x2c198928, L"HarlowSolid",
- L"Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0, 1252},
- {0x2c6ac6b2, L"LucidaBright",
- L"PT Sans Narrow,Papyrus,Damascus,STIXNonUnicode,Arial Rounded MT "
- L"Bold,Comic Sans MS,Avenir Next",
- 2, 1252},
- {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0x2d5a47b0, L"STCaiyun", L"Kaiti SC,Songti SC", 0, 936},
- {0x2def26bf, L"BernardMT-Condensed",
- L"Impact,Avenir Next Condensed Demi Bold,American Typewriter", 0, 1252},
- {0x2fd8930b, L"KozukaMinchoPr6NR", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x3115525a, L"FangSong_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252},
- {0x31327817, L"MyriadPro", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x32244975, L"Helvetica",
- L"Arial Narrow,Arial Unicode MS,Damascus,STIXNonUnicode", 0, 1252},
- {0x32ac995c, L"Terminal", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x338d648a, L"NiagaraEngraved-Reg", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0x33bb65f2, L"Sylfaen", L"Arial Unicode MS,Marion", 2, 1252},
- {0x3402c30e, L"MSPMincho", L"Arial Unicode MS,Apple SD Gothic Neo", 2,
- 1252},
- {0x3412bf31, L"SimSun-PUA", L"STHeiti,Heiti TC,STFangsong", 0, 936},
- {0x36eb39b9, L"BerlinSansFB", L"American Typewriter,Impact", 0, 1252},
- {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
- {0x3864c4f6, L"HighTowerText", L"STIXGeneral,.Helvetica Neue Desk UI", 2,
- 1252},
- {0x3a257d03, L"FangSong_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252},
- {0x3cdae668, L"FreestyleScript", L"Nadeem,Zapf Dingbats,STIXNonUnicode", 8,
- 1252},
- {0x3d55aed7, L"Jokerman",
- L"Papyrus,Lucida Grande,Heiti TC,American Typewriter", 0, 1252},
- {0x3d5b4385, L"PMingLiU", L"Heiti SC,STHeiti", 2, 1252},
- {0x3d9b7669, L"EstrangeloEdessa", L"American Typewriter,Marion", 0, 1252},
- {0x3e532d74, L"FranklinGothicMedium", L"Impact,Arial Narrow", 0, 1252},
- {0x3e6aa32d, L"NSimSun", L"STHeiti,STFangsong", 1, 936},
- {0x3f6c36a8, L"Gautami",
- L"Damascus,STIXNonUnicode,STIXGeneral,American Typewriter", 0, 1252},
- {0x3ff32662, L"Chiller-Regular", L"Papyrus,KufiStandardGK,Baghdad", 0,
- 1252},
- {0x409de312, L"ModernNo.20", L"Avenir Next Condensed,Impact", 2, 1252},
- {0x41443c5e, L"Georgia", L".Helvetica Neue Desk UI,Arial Unicode MS", 2,
- 1252},
- {0x4160ade5, L"BellGothicStdBlack", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0x421976c4, L"Modern-Regular", L"Impact", 2, 1252},
- {0x422a7252, L"Stencil", L"STIXNonUnicode,Songti SC,Georgia,Baskerville", 0,
- 1252},
- {0x42c8554f, L"Fixedsys", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x435cb41d, L"Roman", L"Arial Narrow", 0, 1252},
- {0x47882383, L"CourierNew", L"PCMyungjo,Osaka,Arial Unicode MS,Songti SC",
- 1, 1252},
- {0x480a2338, L"BerlinSansFBDemi",
- L"STIXNonUnicode,American Typewriter,Avenir Next Condensed Heavy", 0,
- 1252},
- {0x480bf7a4, L"CourierStd", L"Courier New", 0, 1252},
- {0x481ad6ed, L"VladimirScript",
- L"STIXNonUnicode,Avenir Next Condensed,Impact", 8, 1252},
- {0x4911577a, L"YouYuan", L"STHeiti,Heiti TC", 1, 936},
- {0x4a788d72, L"STXingkai", L"Kaiti SC,Songti SC", 0, 936},
- {0x4bf88566, L"SegoeCondensed", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x4ccf51a4, L"BerlinSansFB-Reg",
- L"STIXNonUnicode,American Typewriter,Impact", 0, 1252},
- {0x4ea967ce, L"GulimChe", L"Arial Unicode MS,Heiti TC,STFangsong", 1, 1252},
- {0x4f68bd79, L"LetterGothicStd",
- L"Courier New,Andale Mono,Ayuthaya,PCMyungjo,Osaka", 0, 1252},
- {0x51a0d0e6, L"KozukaGothicPr6NM", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x531b3dea, L"BasemicSymbol", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x5333fd39, L"CalifornianFB-Reg",
- L"American Typewriter,Avenir Next Condensed,Impact", 2, 1252},
- {0x53561a54, L"FZYTK--GBK1-0", L"STFangsong,Songti SC,STSong", 0, 936},
- {0x55e0dde6, L"LucidaSansTypewriter", L"Menlo,Courier New,Andale Mono", 0,
- 1252},
- {0x574d4d3d, L"AdobeArabic", L"Arial Narrow", 0, 1252},
- {0x5792e759, L"STKaiti", L"Songti SC,Arial Unicode MS", 0, 936},
- {0x5921978e, L"LucidaSansUnicode", L"Lucida Grande,Arial Unicode MS,Menlo",
- 0, 1252},
- {0x594e2da4, L"Vrinda", L"Geeza Pro,Damascus,STIXGeneral,Gill Sans", 0,
- 1252},
- {0x59baa9a2, L"KaiTi_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252},
- {0x5cfedf4f, L"BaskOldFace",
- L"Avenir Next Condensed Heavy,PT Sans,Avenir Next Condensed", 0, 1252},
- {0x5e16ac91, L"TrajanPro", L"Arial Narrow,PT Sans Narrow,Damascus", 0,
- 1252},
- {0x5f97921c, L"AdobeMyungjoStdM",
- L"AppleMyungjo,AppleGothic,Arial Unicode MS", 0, 936},
- {0x5fefbfad, L"Batang", L"Arial Unicode MS,Songti SC", 2, 1252},
- {0x605342b9, L"DotumChe", L"Arial Unicode MS,Heiti TC", 1, 1252},
- {0x608c5f9a, L"KaiTi_GB2312", L"Hiragino Sans GB,STHeiti,Heiti TC", 0, 936},
- {0x61efd0d1, L"MaturaMTScriptCapitals",
- L"Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black,Avenir Next Heavy",
- 0, 1252},
- {0x626608a9, L"MVBoli",
- L"Apple Braille,Geeza Pro,Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x630501a3, L"SmallFonts", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x65d0e2a9, L"FZYTK--GBK1-0", L"STFangsong,Songti SC,STSong", 0, 936},
- {0x669f29e1, L"FZSTK--GBK1-0", L"STHeiti,Heiti TC", 0, 936},
- {0x673a9e5f, L"Tunga",
- L"Damascus,STIXNonUnicode,Avenir Next Condensed,Avenir Next Condensed "
- L"Ultra Light,Futura",
- 0, 1252},
- {0x691aa4ce, L"NiagaraSolid", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x696259b7, L"Corbel", L"Cochin,Baskerville,Marion", 0, 1252},
- {0x696ee9be, L"STXihei", L"STHeiti,Heiti TC,Songti SC,Arial Unicode MS", 0,
- 936},
- {0x6c59cf69, L"Dotum", L"Arial Unicode MS,Songti SC", 0, 1252},
- {0x707fa561, L"Gungsuh", L"Arial Unicode MS,Heiti TC", 2, 1252},
- {0x71416bb2, L"ZWAdobeF",
- L"STIXSizeFourSym,STIXSizeThreeSym,STIXSizeTwoSym,STIXSizeOneSym", 0,
- 1252},
- {0x71b41801, L"Verdana",
- L"Tahoma,Marion,Apple Symbols,.Helvetica Neue Desk UI,Lucida "
- L"Grande,Courier New",
- 0, 1252},
- {0x73f25e4c, L"PalatinoLinotype", L"Palatino,Arial Unicode MS", 0, 1252},
- {0x73f4d19f, L"NiagaraEngraved", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x74001694, L"MyriadProBlack", L"Palatino,Baskerville,Marion,Cochin", 0,
- 1252},
- {0x74b14d8f, L"Haettenschweiler", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x74cb44ee, L"NSimSun", L"STHeiti,Heiti TC,STFangsong", 1, 936},
- {0x76b4d7ff, L"Shruti",
- L"Damascus,STIXNonUnicode,Arial Unicode MS,American Typewriter", 0, 1252},
- {0x788b3533, L"Webdings", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
- {0x797dde99, L"MSSerif", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x7a0f9e9e, L"MSMincho",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
- L"PL UMing TW MBE,Arial Unicode MS,Apple SD Gothic Neo",
- 1, 1252},
- {0x7b439caf, L"OldEnglishTextMT",
- L"STIXNonUnicode,Arial Unicode MS,Baskerville,Avenir Next Medium", 0,
- 1252},
- {0x8213a433, L"LucidaSans-Typewriter",
- L"Comic Sans MS,Avenir Next,Arial Rounded MT Bold", 0, 1252},
- {0x82fec929, L"AdobeSongStdL", L"Heiti TC,STHeiti", 0, 936},
- {0x83581825, L"Modern", L"Avenir Next Condensed,Impact", 0, 1252},
- {0x835a2823, L"Algerian",
- L"STIXNonUnicode,Baskerville,Avenir Next Medium,American Typewriter", 0,
- 1252},
- {0x83dab9f5, L"Script", L"Arial Narrow", 0, 1252},
- {0x847b56da, L"Tahoma", L"Songti SC,Apple Symbols", 0, 1252},
- {0x8a783cb2, L"SimSun-PUA", L"STHeiti,Heiti TC,STFangsong", 0, 1252},
- {0x8b5cac0e, L"Onyx", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0x8c6a499e, L"Gulim", L"Arial Unicode MS,Songti SC", 0, 1252},
- {0x8e0af790, L"JuiceITC", L"Nadeem,Al Bayan", 0, 1252},
- {0x8e8d43b2, L"Centaur", L"Avenir Next Condensed,Noteworthy,Impact", 2,
- 1252},
- {0x8ee4dcca, L"BookshelfSymbol7", L"Microsoft Sans Serif,Apple Symbols", 0,
- 1252},
- {0x90794800, L"BellGothicStdLight", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0x909b516a, L"Century", L"Damascus,Andale Mono,Songti SC,Arial Unicode MS",
- 2, 1252},
- {0x92ae370d, L"MSOutlook", L"Microsoft Sans Serif,Apple Symbols", 4, 42},
- {0x93c9fbf1, L"LucidaFax",
- L"PT Sans Narrow,Papyrus,Kokonor,Geeza Pro,Arial Rounded MT Bold,Lucida "
- L"Grande,Futura",
- 2, 1252},
- {0x9565085e, L"BookAntiqua", L"Palatino,Microsoft Sans Serif,Apple Symbols",
- 2, 1252},
- {0x9856d95d, L"AdobeMingStdL", L"AHiragino Sans GB,Heiti TC,STHeiti", 0,
- 949},
- {0x9bbadd6b, L"ColonnaMT", L"Noteworthy,Avenir Next Condensed,Impact", 0,
- 1252},
- {0x9cbd16a4, L"ShowcardGothic-Reg",
- L"Arial Unicode MS,Georgia,American Typewriter", 0, 1252},
- {0x9d73008e, L"MSSansSerif", L"Songti SC,Apple Symbols", 0, 1252},
- {0xa0607db1, L"GungsuhChe",
- L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
- L"PL UMing TW MBE,Arial Unicode MS,Heiti TC,STFangsong",
- 1, 1252},
- {0xa0bcf6a1, L"LatinWide", L"Zapfino,Arial Black,STHeiti", 2, 1252},
- {0xa1429b36, L"Symbol", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
- {0xa1fa5abc, L"Wingdings2", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
- {0xa1fa5abd, L"Wingdings3", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
- {0xa427bad4, L"InformalRoman-Regular",
- L"STIXNonUnicode,Arial Narrow,Avenir Next Condensed Demi Bold", 8, 1252},
- {0xa8b92ece, L"FZSTK--GBK1-0", L"STHeiti,Heiti TC,STFangsong", 0, 936},
- {0xa8d83ece, L"CalifornianFB",
- L"American Typewriter,Avenir Next Condensed,Impact", 2, 1252},
- {0xaa3e082c, L"Kingsoft-Phonetic",
- L"STIXVariants,STIXSizeOneSym,Apple Braille", 0, 1252},
- {0xaa6bcabe, L"HarlowSolidItalic",
- L"STIXNonUnicode,Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0,
- 1252},
- {0xade5337c, L"MSUIGothic", L"Arial Unicode MS,Apple SD Gothic Neo", 0,
- 1252},
- {0xb08dd941, L"WideLatin",
- L"Marion,Papyrus,Nanum Pen Script,Zapf Dingbats,Damascus,Zapfino,Arial "
- L"Black,STHeiti",
- 2, 1252},
- {0xb12765e0, L"ITCLegacySansStdBook",
- L"LastResort,.Helvetica Neue Desk UI,Arial Unicode MS,Palatino", 0, 1252},
- {0xb207f05d, L"PoorRichard", L"Noteworthy,Avenir Next Condensed,Impact", 2,
- 1252},
- {0xb3bc492f, L"JuiceITC-Regular", L"Nadeem,Al Bayan,STIXNonUnicode", 0,
- 1252},
- {0xb5545399, L"Marlett", L"Microsoft Sans Serif,Apple Symbols", 4, 42},
- {0xb5dd1ebb, L"BritannicBold",
- L"Damascus,STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252},
- {0xb699c1c5, L"LucidaCalligraphy-Italic", L"STHeiti,Arial Black", 0, 1252},
- {0xb725d629, L"TimesNewRoman", L"Microsoft Sans Serif,Apple Symbols", 2,
- 1252},
- {0xb7eaebeb, L"AdobeHeitiStdR", L"Heiti TC,STHeiti", 0, 936},
- {0xbd29c486, L"BerlinSansFBDemi-Bold",
- L"American Typewriter,Avenir Next Condensed Heavy", 0, 1252},
- {0xbe8a8db4, L"BookshelfSymbolSeven", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0xc16c0118, L"AdobeHebrew",
- L".Helvetica Neue Desk UI,Palatino,American Typewriter", 0, 1252},
- {0xc318b0af, L"MyriadProLight", L"Palatino,Baskerville,Marion", 0, 1252},
- {0xc65e5659, L"CambriaMath", L"Arial Unicode MS", 2, 1252},
- {0xc75c8f05, L"LucidaConsole", L"Courier New,Menlo,Andale Mono", 1, 1252},
- {0xca7c35d6, L"Calibri", L"Apple Symbols,HeadLineA", 0, 1252},
- {0xcb053f53, L"MicrosoftYaHei", L"Arial Unicode MS", 0, 936},
- {0xcb7190f9, L"Magneto-Bold", L"Lucida Grande", 0, 1252},
- {0xcca00cc5, L"System", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0xccad6f76, L"Jokerman-Regular", L"Lucida Grande", 0, 1252},
- {0xccc5818c, L"EuroSign", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0xcf3d7234, L"LucidaHandwriting-Italic",
- L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0xcf7b8fdb, L"MinionPro",
- L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
- {0xcfe5755f, L"Simhei", L"STHeiti,Heiti TC,STFangsong", 1, 936},
- {0xd011f4ee, L"MSPGothic", L"Arial Unicode MS,Apple SD Gothic Neo", 0,
- 1252},
- {0xd060e7ef, L"Vivaldi",
- L"STIXNonUnicode,Arial Unicode MS,Avenir Medium,Avenir Next Medium", 8,
- 1252},
- {0xd07edec1, L"FranklinGothic-Medium", L"Impact,Arial Narrow", 0, 1252},
- {0xd107243f, L"SimSun", L"STHeiti,Heiti TC,STFangsong", 0, 936},
- {0xd1881562, L"ArialNarrow", L"PT Sans Narrow,Apple Symbols", 0, 1252},
- {0xd22b7dce, L"BodoniMTPosterCompressed",
- L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
- {0xd22bfa60, L"ComicSansMS",
- L"Damascus,Georgia,.Helvetica Neue Desk UI,Lucida Grande,Arial Unicode MS",
- 8, 1252},
- {0xd3bd0e35, L"Bauhaus93",
- L"STIXNonUnicode,Arial Unicode MS,Avenir Next,Avenir", 0, 1252},
- {0xd429ee7a, L"STFangsong", L"Songti SC,Arial Unicode MS", 0, 936},
- {0xd6679c12, L"BernardMTCondensed",
- L"Impact,Avenir Next Condensed Demi Bold", 0, 1252},
- {0xd8e8a027, L"LucidaSans",
- L"Arial Narrow,Khmer MN,Kokonor,Damascus,Microsoft Sans Serif,Apple "
- L"Symbols",
- 0, 1252},
- {0xd9fe7761, L"HighTowerText-Reg",
- L"STIXGeneral,.Helvetica Neue Desk UI,Trebuchet MS", 2, 1252},
- {0xda7e551e, L"STSong", L"Arial Unicode MS", 0, 936},
- {0xdaa6842d, L"STZhongsong", L"STFangsong,Songti SC,STSong", 0, 936},
- {0xdaaab93f, L"STFangsong", L"Songti SC,Arial Unicode MS", 0, 936},
- {0xdaeb0713, L"STSong", L"Songti SC,Arial Unicode MS", 0, 936},
- {0xdafedbef, L"STCaiyun", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
- {0xdb00a3d9, L"Broadway",
- L"Papyrus,STIXNonUnicode,Arial Black,Avenir Next Heavy,Heiti TC", 0, 1252},
- {0xdb1f5ad4, L"STXinwei", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
- {0xdb326e7f, L"STKaiti", L"Songti SC,Arial Unicode MS", 0, 936},
- {0xdb69595a, L"STHupo", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
- {0xdba0082c, L"STXihei", L"Songti SC,Arial Unicode MS", 0, 936},
- {0xdbd0ab18, L"STXingkai", L"Kaiti SC,Songti SC", 0, 936},
- {0xdc1a7db1, L"STLiti", L"Kaiti SC,Songti SC", 0, 936},
- {0xdc33075f, L"KristenITC-Regular",
- L"STIXNonUnicode,Damascus,Songti SC,STSong", 8, 1252},
- {0xdcc7009c, L"Harrington",
- L"STIXNonUnicode,Avenir Next Condensed Heavy,Noteworthy", 0, 1252},
- {0xdd712466, L"ArialBlack", L"Geeza Pro,Damascus,Songti SC,STSong", 0,
- 1252},
- {0xdde87b3e, L"Impact", L"Arial Narrow,Marion", 0, 1252},
- {0xdf69fb32, L"SnapITC",
- L"Arial Narrow,PT Sans Narrow,Marion,STHeiti,Arial Black", 0, 1252},
- {0xdf8b25e8, L"CenturyGothic",
- L"Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252},
- {0xe0f705c0, L"KristenITC", L"Songti SC,STSong", 8, 1252},
- {0xe1427573, L"Raavi",
- L"Damascus,STIXNonUnicode,Marion,Papyrus,Avenir Next Condensed "
- L"Heavy,American Typewriter",
- 0, 1252},
- {0xe2cea0cb, L"Magneto",
- L"STIXNonUnicode,Damascus,Geeza Pro,Lucida Grande,Georgia,Heiti TC", 0,
- 1252},
- {0xe36a9e17, L"Ravie", L"STHeiti,Arial Black", 0, 1252},
- {0xe433f8e2, L"Parchment", L"Microsoft Sans Serif,Apple Symbols", 8, 1252},
- {0xe43dff4a, L"Wingdings", L"Microsoft Sans Serif,Apple Symbols", 4, 42},
- {0xe4e2c405, L"MTExtra", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
- {0xe618cc35, L"InformalRoman", L"Arial Narrow", 8, 1252},
- {0xe6c27ffc, L"Mistral", L"Apple Symbols", 8, 1252},
- {0xe7ebf4b9, L"Courier", L"Courier New", 0, 1252},
- {0xe8bc4a9d, L"MSReferenceSpecialty", L"Microsoft Sans Serif,Apple Symbols",
- 0, 1252},
- {0xe90fb013, L"TempusSansITC",
- L"STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 0, 1252},
- {0xec637b42, L"Consolas",
- L"AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL UKai TW MBE,AR PL UMing "
- L"CN,AR PL UMing HK,Microsoft Sans Serif,Tahoma",
- 1, 1252},
- {0xed3a683b, L"STXinwei", L"Kaiti SC,Songti SC,", 0, 936},
- {0xef264cd1, L"LucidaHandwriting",
- L"Arial Narrow,Avenir Next Condensed Demi Bold,Avenir Next "
- L"Condensed,Avenir Next Condensed Medium,STHeiti,Arial Black",
- 0, 1252},
- {0xf086bca2, L"BaskervilleOldFace",
- L"STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252},
- {0xf1028030, L"Mangal",
- L"Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Tahoma", 2, 1252},
- {0xf1da7eb9, L"ShowcardGothic",
- L"Papyrus,Arial Unicode MS,Georgia,American Typewriter", 0, 1252},
- {0xf210f06a, L"ArialMT",
- L"Arial Unicode MS,Arial Narrow,STIXNonUnicode,Damascus,Avenir Next "
- L"Condensed Demi Bold,Avenir Next Condensed Medium,Avenir Next Condensed",
- 0, 1252},
- {0xf477f16a, L"Latha",
- L"Arial Narrow,Damascus,STIXNonUnicode,American Typewriter", 0, 1252},
- {0xf616f3dd, L"LiSu", L"STHeiti,Heiti TC,STFangsong", 1, 936},
- {0xfa479aa6, L"MicrosoftYaHei", L"Arial Unicode MS", 0, 936},
- {0xfcd19697, L"BookmanOldStyle",
- L"Geeza Pro,Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252},
- {0xfe209a82, L"LucidaCalligraphy",
- L"Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black", 0, 1252},
- {0xfef135f8, L"AdobeHeitiStd-Regular", L"Heiti TC,STHeiti", 0, 936},
-};
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
-static const XFA_FONTINFO g_XFAFontsMap[] = {
- {0x01d5d33e, L"SimSun", L"Droid Sans Fallback", 0, 936},
- {0x01e4f102, L"YouYuan", L"Droid Sans Fallback", 1, 936},
- {0x030549dc, L"LiSu", L"Droid Sans Fallback", 1, 936},
- {0x032edd44, L"Simhei", L"Droid Sans Fallback", 1, 936},
- {0x03eac6fc, L"PoorRichard-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic "
- L"Naskh,Droid Sans Ethiopic",
- 2, 1252},
- {0x03ed90e6, L"Nina",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x077b56b3, L"KingsoftPhoneticPlain",
- L"Droid Sans Thai,Droid Sans Armenian,Droid Arabic Naskh,Droid Sans "
- L"Ethiopic,Droid Sans Fallback",
- 0, 1252},
- {0x078ed524, L"MicrosoftSansSerif", L"Droid Sans Fallback", 0, 1252},
- {0x089b18a9, L"Arial", L"Droid Sans Fallback", 0, 1252},
- {0x0b2cad72, L"MonotypeCorsiva",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x0bb003e7, L"Kartika",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 2, 1252},
- {0x0bb469df, L"VinerHandITC",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x0bc1a851, L"SegoeUI", L"Droid Sans Fallback", 0, 1252},
- {0x0c112ebd, L"KozukaGothicPro-VIM",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x0cfcb9c1, L"AdobeThai",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 847},
- {0x0e7de0f9, L"Playbill",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 0, 1252},
- {0x0eff47c3, L"STHupo", L"Droid Sans Fallback", 0, 936},
- {0x107ad374, L"Constantia",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x12194c2d, L"KunstlerScript",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x135ef6a1, L"MinionProSmBd",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x158c4049, L"Garamond",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x160ecb24, L"STZhongsong", L"Droid Sans Fallback", 0, 936},
- {0x161ed07e, L"MSGothic", L"Droid Sans Fallback", 1, 1252},
- {0x171d1ed1, L"SnapITC-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x18d1188f, L"Cambria", L"Droid Sans Fallback", 2, 1252},
- {0x18eaf350, L"ArialUnicodeMS", L"Droid Sans Fallback", 0, 936},
- {0x1a92d115, L"MingLiU", L"Droid Sans Fallback", 1, 1252},
- {0x1cc217c6, L"TrebuchetMS",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x1d649596, L"BasemicTimes",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x1e34ee60, L"BellMT",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x1eb36945, L"CooperBlack",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x1ef7787d, L"BatangChe", L"Droid Sans Fallback", 1, 1252},
- {0x20b3bd3a, L"BrushScriptMT", L"Droid Arabic Naskh,Droid Sans Ethiopic", 8,
- 1252},
- {0x220877aa, L"Candara",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x22135007, L"FreestyleScript-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x251059c3, L"Chiller",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252},
- {0x25bed6dd, L"MSReferenceSansSerif", L"Droid Sans Fallback", 0, 1252},
- {0x28154c81, L"Parchment-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x29711eb9, L"STLiti", L"Droid Sans Fallback", 0, 936},
- {0x2b1993b4, L"Basemic",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x2b316339, L"NiagaraSolid-Reg",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x2c147529, L"FootlightMTLight",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x2c198928, L"HarlowSolid",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x2c6ac6b2, L"LucidaBright",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 2, 1252},
- {0x2c9f38e2, L"KozukaMinchoPro-VIR",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x2d5a47b0, L"STCaiyun", L"Droid Sans Fallback", 0, 936},
- {0x2def26bf, L"BernardMT-Condensed",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x2fd8930b, L"KozukaMinchoPr6NR",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x3115525a, L"FangSong_GB2312", L"Droid Sans Fallback", 0, 1252},
- {0x31327817, L"MyriadPro",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x32244975, L"Helvetica",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252},
- {0x32ac995c, L"Terminal",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x338d648a, L"NiagaraEngraved-Reg",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x33bb65f2, L"Sylfaen",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x3402c30e, L"MSPMincho", L"Droid Sans Fallback", 2, 1252},
- {0x3412bf31, L"SimSun-PUA", L"Droid Sans Fallback", 0, 936},
- {0x36eb39b9, L"BerlinSansFB",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
- {0x3864c4f6, L"HighTowerText",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x3a257d03, L"FangSong_GB2312", L"Droid Sans Fallback", 0, 1252},
- {0x3cdae668, L"FreestyleScript",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x3d55aed7, L"Jokerman",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x3d5b4385, L"PMingLiU", L"Droid Sans Fallback", 2, 1252},
- {0x3d9b7669, L"EstrangeloEdessa",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x3e532d74, L"FranklinGothicMedium",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x3e6aa32d, L"NSimSun", L"Droid Sans Fallback", 1, 936},
- {0x3f6c36a8, L"Gautami",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono,Droid Sans Fallback",
- 0, 1252},
- {0x3ff32662, L"Chiller-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x409de312, L"ModernNo.20",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x41443c5e, L"Georgia",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x4160ade5, L"BellGothicStdBlack",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x421976c4, L"Modern-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x422a7252, L"Stencil",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x42c8554f, L"Fixedsys",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x435cb41d, L"Roman",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x47882383, L"CourierNew", L"Droid Sans Fallback", 1, 1252},
- {0x480a2338, L"BerlinSansFBDemi",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x480bf7a4, L"CourierStd", L"Droid Sans Fallback", 0, 1252},
- {0x481ad6ed, L"VladimirScript",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0x4911577a, L"YouYuan", L"Droid Sans Fallback", 1, 936},
- {0x4a788d72, L"STXingkai", L"Droid Sans Fallback", 0, 936},
- {0x4bf88566, L"SegoeCondensed",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x4ccf51a4, L"BerlinSansFB-Reg",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x4ea967ce, L"GulimChe", L"Droid Sans Fallback", 1, 1252},
- {0x4f68bd79, L"LetterGothicStd",
- L"Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
- L"Mono,Droid Serif,Droid Sans Fallback",
- 0, 1252},
- {0x51a0d0e6, L"KozukaGothicPr6NM",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x531b3dea, L"BasemicSymbol",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x5333fd39, L"CalifornianFB-Reg",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x53561a54, L"FZYTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
- {0x55e0dde6, L"LucidaSansTypewriter",
- L"Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic", 0, 1252},
- {0x574d4d3d, L"AdobeArabic",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x5792e759, L"STKaiti", L"Droid Sans Fallback", 0, 936},
- {0x5921978e, L"LucidaSansUnicode", L"Droid Sans Fallback", 0, 1252},
- {0x594e2da4, L"Vrinda",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 0, 1252},
- {0x59baa9a2, L"KaiTi_GB2312", L"Droid Sans Fallback", 0, 1252},
- {0x5cfedf4f, L"BaskOldFace",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x5f97921c, L"AdobeMyungjoStdM", L"Droid Sans Fallback", 0, 936},
- {0x5fefbfad, L"Batang", L"Droid Sans Fallback", 2, 1252},
- {0x605342b9, L"DotumChe", L"Droid Sans Fallback", 1, 1252},
- {0x608c5f9a, L"KaiTi_GB2312", L"Droid Sans Fallback", 0, 936},
- {0x61efd0d1, L"MaturaMTScriptCapitals",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 0, 1252},
- {0x626608a9, L"MVBoli",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 0, 1252},
- {0x630501a3, L"SmallFonts",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x65d0e2a9, L"FZYTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
- {0x669f29e1, L"FZSTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
- {0x673a9e5f, L"Tunga",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono,Droid Sans Fallback",
- 0, 1252},
- {0x691aa4ce, L"NiagaraSolid",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x696259b7, L"Corbel",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x696ee9be, L"STXihei", L"Droid Sans Fallback", 0, 936},
- {0x6c59cf69, L"Dotum", L"Droid Sans Fallback", 0, 1252},
- {0x707fa561, L"Gungsuh", L"Droid Sans Fallback", 2, 1252},
- {0x71416bb2, L"ZWAdobeF",
- L"Droid Arabic Naskh,Droid Sans Armenian,Droid Sans Ethiopic,Droid Sans "
- L"Georgian,Droid Sans Hebrew,Droid Sans Thai",
- 0, 1252},
- {0x71b41801, L"Verdana",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x73f25e4c, L"PalatinoLinotype", L"Droid Sans Fallback", 0, 1252},
- {0x73f4d19f, L"NiagaraEngraved",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x74001694, L"MyriadProBlack", L"Book Antiqua,Constantia,Dotum,Georgia", 0,
- 1252},
- {0x74b14d8f, L"Haettenschweiler",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x74cb44ee, L"NSimSun", L"Droid Sans Fallback", 1, 936},
- {0x76b4d7ff, L"Shruti",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 0, 1252},
- {0x788b3533, L"Webdings",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
- {0x797dde99, L"MSSerif",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x7a0f9e9e, L"MSMincho", L"Droid Sans Fallback", 1, 1252},
- {0x7b439caf, L"OldEnglishTextMT",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x8213a433, L"LucidaSans-Typewriter",
- L"Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 0, 1252},
- {0x82fec929, L"AdobeSongStdL", L"Droid Sans Fallback", 0, 936},
- {0x83581825, L"Modern",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x835a2823, L"Algerian",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x83dab9f5, L"Script",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x847b56da, L"Tahoma", L"Droid Sans Fallback", 0, 1252},
- {0x8a783cb2, L"SimSun-PUA", L"Droid Sans Fallback", 0, 1252},
- {0x8b5cac0e, L"Onyx",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x8c6a499e, L"Gulim", L"Droid Sans Fallback", 0, 1252},
- {0x8e0af790, L"JuiceITC",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x8e8d43b2, L"Centaur",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x8ee4dcca, L"BookshelfSymbol7",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x90794800, L"BellGothicStdLight",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x909b516a, L"Century",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x92ae370d, L"MSOutlook",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
- {0x93c9fbf1, L"LucidaFax",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 2, 1252},
- {0x9565085e, L"BookAntiqua",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0x9856d95d, L"AdobeMingStdL", L"Droid Sans Fallback", 0, 949},
- {0x9bbadd6b, L"ColonnaMT",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0x9cbd16a4, L"ShowcardGothic-Reg",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252},
- {0x9d73008e, L"MSSansSerif",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xa0607db1, L"GungsuhChe", L"Droid Sans Fallback", 1, 1252},
- {0xa0bcf6a1, L"LatinWide",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0xa1429b36, L"Symbol",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
- {0xa1fa5abc, L"Wingdings2",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
- {0xa1fa5abd, L"Wingdings3",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
- {0xa427bad4, L"InformalRoman-Regular",
- L"Droid Arabic Naskh,Droid Sans Ethiopic", 8, 1252},
- {0xa8b92ece, L"FZSTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
- {0xa8d83ece, L"CalifornianFB",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0xaa3e082c, L"Kingsoft-Phonetic",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xaa6bcabe, L"HarlowSolidItalic",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xade5337c, L"MSUIGothic",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xb08dd941, L"WideLatin",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 2, 1252},
- {0xb207f05d, L"PoorRichard",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0xb3bc492f, L"JuiceITC-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xb5545399, L"Marlett",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
- {0xb5dd1ebb, L"BritannicBold", L"Droid Arabic Naskh,Droid Sans Ethiopic", 0,
- 1252},
- {0xb699c1c5, L"LucidaCalligraphy-Italic",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xb725d629, L"TimesNewRoman", L"Droid Sans Fallback", 2, 1252},
- {0xb7eaebeb, L"AdobeHeitiStdR", L"Droid Sans Fallback", 0, 936},
- {0xbd29c486, L"BerlinSansFBDemi-Bold",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xbe8a8db4, L"BookshelfSymbolSeven",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xc16c0118, L"AdobeHebrew",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic "
- L"Naskh,Droid Sans Ethiopic",
- 0, 1252},
- {0xc318b0af, L"MyriadProLight",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xc65e5659, L"CambriaMath", L"Droid Sans Fallback", 2, 1252},
- {0xc75c8f05, L"LucidaConsole",
- L"Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 1, 1252},
- {0xca7c35d6, L"Calibri", L"Droid Sans Fallback", 0, 1252},
- {0xcb053f53, L"MicrosoftYaHei", L"Droid Sans Fallback", 0, 936},
- {0xcb7190f9, L"Magneto-Bold",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xcca00cc5, L"System",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xccad6f76, L"Jokerman-Regular",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xccc5818c, L"EuroSign",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xcf3d7234, L"LucidaHandwriting-Italic",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xcf7b8fdb, L"MinionPro",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xcfe5755f, L"Simhei", L"Droid Sans Fallback", 1, 936},
- {0xd011f4ee, L"MSPGothic", L"Droid Sans Fallback", 0, 1252},
- {0xd060e7ef, L"Vivaldi",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0xd07edec1, L"FranklinGothic-Medium",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xd107243f, L"SimSun", L"Droid Sans Fallback", 0, 936},
- {0xd1881562, L"ArialNarrow",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xd22b7dce, L"BodoniMTPosterCompressed",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xd22bfa60, L"ComicSansMS", L"Droid Serif,Roboto,Droid Sans Fallback", 8,
- 1252},
- {0xd3bd0e35, L"Bauhaus93",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xd429ee7a, L"STFangsong", L"Droid Sans Fallback", 0, 936},
- {0xd6679c12, L"BernardMTCondensed",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xd8e8a027, L"LucidaSans",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252},
- {0xd9fe7761, L"HighTowerText-Reg",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
- {0xda7e551e, L"STSong", L"Droid Sans Fallback", 0, 936},
- {0xdaa6842d, L"STZhongsong", L"Droid Sans Fallback", 0, 936},
- {0xdaaab93f, L"STFangsong", L"Droid Sans Fallback", 0, 936},
- {0xdaeb0713, L"STSong",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 936},
- {0xdafedbef, L"STCaiyun", L"Droid Sans Fallback", 0, 936},
- {0xdb00a3d9, L"Broadway",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xdb1f5ad4, L"STXinwei", L"Droid Sans Fallback", 0, 936},
- {0xdb326e7f, L"STKaiti", L"Droid Sans Fallback", 0, 936},
- {0xdb69595a, L"STHupo", L"Droid Sans Fallback", 0, 936},
- {0xdba0082c, L"STXihei", L"Droid Sans Fallback", 0, 936},
- {0xdbd0ab18, L"STXingkai", L"Droid Sans Fallback", 0, 936},
- {0xdc1a7db1, L"STLiti", L"Droid Sans Fallback", 0, 936},
- {0xdc33075f, L"KristenITC-Regular",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252},
- {0xdcc7009c, L"Harrington",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xdd712466, L"ArialBlack",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xdde87b3e, L"Impact",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xdf69fb32, L"SnapITC",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xdf8b25e8, L"CenturyGothic",
- L"Droid Serif,Roboto,Droid Serif,Droid Sans Mono", 0, 1252},
- {0xe0f705c0, L"KristenITC",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252},
- {0xe1427573, L"Raavi",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xe2cea0cb, L"Magneto",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xe36a9e17, L"Ravie",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xe433f8e2, L"Parchment",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0xe43dff4a, L"Wingdings",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
- {0xe4e2c405, L"MTExtra",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
- {0xe618cc35, L"InformalRoman",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 8, 1252},
- {0xe6c27ffc, L"Mistral",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
- {0xe7ebf4b9, L"Courier", L"Droid Sans Fallback", 0, 1252},
- {0xe8bc4a9d, L"MSReferenceSpecialty",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xe90fb013, L"TempusSansITC",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xec637b42, L"Consolas", L"Droid Sans Fallback", 1, 1252},
- {0xed3a683b, L"STXinwei", L"Droid Sans Fallback", 0, 936},
- {0xef264cd1, L"LucidaHandwriting",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xf086bca2, L"BaskervilleOldFace",
- L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xf1028030, L"Mangal",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 2, 1252},
- {0xf1da7eb9, L"ShowcardGothic",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252},
- {0xf210f06a, L"ArialMT",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252},
- {0xf477f16a, L"Latha",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xf616f3dd, L"LiSu", L"Droid Sans Fallback", 1, 936},
- {0xfa479aa6, L"MicrosoftYaHei", L"Droid Sans Fallback", 0, 936},
- {0xfcd19697, L"BookmanOldStyle",
- L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
- {0xfe209a82, L"LucidaCalligraphy",
- L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
- L"Mono",
- 0, 1252},
- {0xfef135f8, L"AdobeHeitiStd-Regular", L"Droid Sans Fallback", 0, 936},
-};
-#endif
-void XFA_LocalFontNameToEnglishName(const CFX_WideStringC& wsLocalName,
- CFX_WideString& wsEnglishName) {
- wsEnglishName = wsLocalName;
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
- FX_DWORD dwLocalNameHash = FX_HashCode_String_GetW(
- wsLocalName.GetPtr(), wsLocalName.GetLength(), TRUE);
- int32_t iStart = 0;
- int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1;
- int32_t iMid = 0;
- do {
- iMid = (iStart + iEnd) / 2;
- FX_DWORD dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash;
- if (dwFontNameHash == dwLocalNameHash) {
- wsEnglishName = g_XFAFontsMap[iMid].pPsName;
- break;
- } else if (dwFontNameHash < dwLocalNameHash) {
- iStart = iMid + 1;
- } else {
- iEnd = iMid - 1;
- }
- } while (iEnd >= iStart);
-#endif
-}
-const XFA_FONTINFO* XFA_GetFontINFOByFontName(
- const CFX_WideStringC& wsFontName) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
- _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
- CFX_WideString wsFontNameTemp = wsFontName;
- wsFontNameTemp.Remove(L' ');
- FX_DWORD dwCurFontNameHash =
- FX_HashCode_String_GetW(wsFontNameTemp, wsFontNameTemp.GetLength(), TRUE);
- int32_t iStart = 0;
- int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1;
- int32_t iMid = 0;
- const XFA_FONTINFO* pFontInfo = NULL;
- do {
- iMid = (iStart + iEnd) / 2;
- FX_DWORD dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash;
- if (dwFontNameHash == dwCurFontNameHash) {
- pFontInfo = &g_XFAFontsMap[iMid];
- break;
- } else if (dwFontNameHash < dwCurFontNameHash) {
- iStart = iMid + 1;
- } else {
- iEnd = iMid - 1;
- }
- } while (iEnd >= iStart);
- return pFontInfo;
-#else
- return NULL;
-#endif
-}
-// static
-IXFA_FontMgr* IXFA_FontMgr::CreateDefault() {
- return new CXFA_DefFontMgr;
-}
-// virtual
-IXFA_FontMgr::~IXFA_FontMgr() {}
-CXFA_DefFontMgr::~CXFA_DefFontMgr() {
- int32_t iCounts = m_CacheFonts.GetSize();
- for (int32_t i = 0; i < iCounts; i++) {
- ((IFX_Font*)m_CacheFonts[i])->Release();
- }
- m_CacheFonts.RemoveAll();
-}
-IFX_Font* CXFA_DefFontMgr::GetFont(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- FX_WORD wCodePage) {
- CFX_WideString wsFontName = wsFontFamily;
- IFX_FontMgr* pFDEFontMgr = ((CXFA_FFDoc*)hDoc)->GetApp()->GetFDEFontMgr();
- const XFA_FONTINFO* pCurFont = NULL;
- FX_BOOL bGetFontInfo = TRUE;
- IFX_Font* pFont = pFDEFontMgr->LoadFont((const FX_WCHAR*)wsFontName,
- dwFontStyles, wCodePage);
- if (!pFont && hDoc) {
- if (bGetFontInfo) {
- pCurFont = XFA_GetFontINFOByFontName(wsFontName);
- }
- if (pCurFont != NULL && pCurFont->pReplaceFont != NULL) {
- FX_DWORD dwStyle = 0;
- if (dwFontStyles & FX_FONTSTYLE_Bold) {
- dwStyle |= FX_FONTSTYLE_Bold;
- }
- if (dwFontStyles & FX_FONTSTYLE_Italic) {
- dwStyle |= FX_FONTSTYLE_Italic;
- }
- const FX_WCHAR* pReplace = pCurFont->pReplaceFont;
- int32_t iLength = FXSYS_wcslen(pReplace);
- while (iLength > 0) {
- const FX_WCHAR* pNameText = pReplace;
- while (*pNameText != L',' && iLength > 0) {
- pNameText++;
- iLength--;
- }
- CFX_WideString wsReplace =
- CFX_WideString(pReplace, pNameText - pReplace);
- pFont = pFDEFontMgr->LoadFont(wsReplace, dwStyle, wCodePage);
- if (pFont != NULL) {
- break;
- }
- iLength--;
- pNameText++;
- pReplace = pNameText;
- }
- }
- }
- if (pFont) {
- m_CacheFonts.Add(pFont);
- }
- return pFont;
-}
-IFX_Font* CXFA_DefFontMgr::GetDefaultFont(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- FX_WORD wCodePage) {
- IFX_FontMgr* pFDEFontMgr = ((CXFA_FFDoc*)hDoc)->GetApp()->GetFDEFontMgr();
- IFX_Font* pFont =
- pFDEFontMgr->LoadFont(L"Arial Narrow", dwFontStyles, wCodePage);
- if (!pFont)
- pFont =
- pFDEFontMgr->LoadFont((const FX_WCHAR*)NULL, dwFontStyles, wCodePage);
- FXSYS_assert(pFont != NULL);
- if (pFont) {
- m_CacheFonts.Add(pFont);
- }
- return pFont;
-}
-struct XFA_PDFFONTNAME {
- const FX_CHAR* lpPsName;
- const FX_CHAR* lpNormal;
- const FX_CHAR* lpBold;
- const FX_CHAR* lpItalic;
- const FX_CHAR* lpBoldItalic;
-};
-const XFA_PDFFONTNAME g_XFAPDFFontName[] = {
- {"Adobe PI Std", "AdobePIStd", "AdobePIStd", "AdobePIStd", "AdobePIStd"},
- {"Myriad Pro Light", "MyriadPro-Light", "MyriadPro-Semibold",
- "MyriadPro-LightIt", "MyriadPro-SemiboldIt"},
-};
-CXFA_PDFFontMgr::CXFA_PDFFontMgr(CXFA_FFDoc* pDoc) {
- m_pDoc = pDoc;
-}
-CXFA_PDFFontMgr::~CXFA_PDFFontMgr() {
- m_FDE2PDFFont.RemoveAll();
- for (const auto& pair : m_FontMap) {
- if (pair.second)
- pair.second->Release();
- }
-}
-IFX_Font* CXFA_PDFFontMgr::FindFont(CFX_ByteString strPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic,
- CPDF_Font** pDstPDFFont,
- FX_BOOL bStrictMatch) {
- CPDF_Document* pDoc = m_pDoc->GetPDFDoc();
- if (pDoc == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pFontSetDict =
- pDoc->GetRoot()->GetDict("AcroForm")->GetDict("DR");
- if (!pFontSetDict) {
- return NULL;
- }
- pFontSetDict = (CPDF_Dictionary*)pFontSetDict->GetDict("Font");
- if (!pFontSetDict) {
- return NULL;
- }
- strPsName.Remove(' ');
- IFX_FontMgr* pFDEFontMgr = m_pDoc->GetApp()->GetFDEFontMgr();
- for (const auto& it : *pFontSetDict) {
- const CFX_ByteString& key = it.first;
- CPDF_Object* pObj = it.second;
- if (!PsNameMatchDRFontName(strPsName, bBold, bItalic, key, bStrictMatch)) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (!pDirect || !pDirect->IsDictionary()) {
- return NULL;
- }
- CPDF_Dictionary* pFontDict = (CPDF_Dictionary*)pDirect;
- if (pFontDict->GetString("Type") != "Font") {
- return NULL;
- }
- CPDF_Font* pPDFFont = pDoc->LoadFont(pFontDict);
- if (!pPDFFont) {
- return NULL;
- }
- if (!pPDFFont->IsEmbedded()) {
- *pDstPDFFont = pPDFFont;
- return NULL;
- }
- return IFX_Font::LoadFont(&pPDFFont->m_Font, pFDEFontMgr);
- }
- return NULL;
-}
-IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- CPDF_Font** pPDFFont,
- FX_BOOL bStrictMatch) {
- FX_DWORD dwHashCode =
- FX_HashCode_String_GetW(wsFontFamily.GetPtr(), wsFontFamily.GetLength());
- CFX_ByteString strKey;
- strKey.Format("%u%u", dwHashCode, dwFontStyles);
- auto it = m_FontMap.find(strKey);
- if (it != m_FontMap.end())
- return it->second;
- CFX_ByteString bsPsName = CFX_ByteString::FromUnicode(wsFontFamily);
- FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold;
- FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic;
- CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic);
- IFX_Font* pFont =
- FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch);
- if (pFont)
- m_FontMap[strKey] = pFont;
- return pFont;
-}
-CFX_ByteString CXFA_PDFFontMgr::PsNameToFontName(
- const CFX_ByteString& strPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic) {
- int32_t nCount = sizeof(g_XFAPDFFontName) / sizeof(XFA_PDFFONTNAME);
- for (int32_t i = 0; i < nCount; i++) {
- if (strPsName == g_XFAPDFFontName[i].lpPsName) {
- int32_t index = 1 + ((bItalic << 1) | bBold);
- return *(&g_XFAPDFFontName[i].lpPsName + index);
- }
- }
- return strPsName;
-}
-FX_BOOL CXFA_PDFFontMgr::PsNameMatchDRFontName(
- const CFX_ByteStringC& bsPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic,
- const CFX_ByteString& bsDRFontName,
- FX_BOOL bStrictMatch) {
- CFX_ByteString bsDRName = bsDRFontName;
- bsDRName.Remove('-');
- int32_t iPsLen = bsPsName.GetLength();
- int32_t nIndex = bsDRName.Find(bsPsName);
- if (nIndex != -1 && !bStrictMatch) {
- return TRUE;
- }
- if (nIndex != 0) {
- return FALSE;
- }
- int32_t iDifferLength = bsDRName.GetLength() - iPsLen;
- if (iDifferLength > 1 || (bBold || bItalic)) {
- int32_t iBoldIndex = bsDRName.Find("Bold");
- FX_BOOL bBoldFont = iBoldIndex > 0;
- if (bBold ^ bBoldFont) {
- return FALSE;
- }
- if (bBoldFont) {
- iDifferLength =
- std::min(iDifferLength - 4, bsDRName.GetLength() - iBoldIndex - 4);
- }
- FX_BOOL bItalicFont = TRUE;
- if (bsDRName.Find("Italic") > 0) {
- iDifferLength -= 6;
- } else if (bsDRName.Find("It") > 0) {
- iDifferLength -= 2;
- } else if (bsDRName.Find("Oblique") > 0) {
- iDifferLength -= 7;
- } else {
- bItalicFont = FALSE;
- }
- if (bItalic ^ bItalicFont) {
- return FALSE;
- }
- if (iDifferLength > 1) {
- CFX_ByteString bsDRTailer = bsDRName.Right(iDifferLength);
- if (bsDRTailer.Equal("MT") || bsDRTailer.Equal("PSMT") ||
- bsDRTailer.Equal("Regular") || bsDRTailer.Equal("Reg")) {
- return TRUE;
- }
- if (bBoldFont || bItalicFont) {
- return FALSE;
- }
- FX_BOOL bMatch = FALSE;
- switch (bsPsName.GetAt(iPsLen - 1)) {
- case 'L': {
- if (bsDRName.Right(5).Equal("Light")) {
- bMatch = TRUE;
- }
- } break;
- case 'R': {
- if (bsDRName.Right(7).Equal("Regular") ||
- bsDRName.Right(3).Equal("Reg")) {
- bMatch = TRUE;
- }
- } break;
- case 'M': {
- if (bsDRName.Right(5).Equal("Medium")) {
- bMatch = TRUE;
- }
- } break;
- default:
- break;
- }
- return bMatch;
- }
- }
- return TRUE;
-}
-FX_BOOL CXFA_PDFFontMgr::GetCharWidth(IFX_Font* pFont,
- FX_WCHAR wUnicode,
- int32_t& iWidth,
- FX_BOOL bCharCode) {
- if (wUnicode != 0x20 || bCharCode) {
- return FALSE;
- }
- CPDF_Font* pPDFFont = (CPDF_Font*)m_FDE2PDFFont.GetValueAt(pFont);
- if (!pPDFFont) {
- return FALSE;
- }
- wUnicode = (FX_WCHAR)pPDFFont->CharCodeFromUnicode(wUnicode);
- iWidth = pPDFFont->GetCharWidthF(wUnicode);
- return TRUE;
-}
-CXFA_FontMgr::CXFA_FontMgr() : m_pDefFontMgr(NULL) {}
-CXFA_FontMgr::~CXFA_FontMgr() {
- DelAllMgrMap();
-}
-IFX_Font* CXFA_FontMgr::GetFont(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- FX_WORD wCodePage) {
- FX_DWORD dwHash = FX_HashCode_String_GetW(wsFontFamily.GetPtr(),
- wsFontFamily.GetLength(), FALSE);
- CFX_ByteString bsKey;
- bsKey.Format("%u%u%u", dwHash, dwFontStyles, wCodePage);
- auto it = m_FontMap.find(bsKey);
- if (it != m_FontMap.end())
- return it->second;
- CFX_WideString wsEnglishName;
- XFA_LocalFontNameToEnglishName(wsFontFamily, wsEnglishName);
- CXFA_PDFFontMgr* pMgr = (CXFA_PDFFontMgr*)m_PDFFontMgrArray.GetValueAt(hDoc);
- CPDF_Font* pPDFFont = NULL;
- IFX_Font* pFont = NULL;
- if (pMgr) {
- pFont = pMgr->GetFont(wsEnglishName, dwFontStyles, &pPDFFont);
- if (pFont)
- return pFont;
- }
- if (!pFont && m_pDefFontMgr) {
- pFont = m_pDefFontMgr->GetFont(hDoc, wsFontFamily, dwFontStyles, wCodePage);
- }
- if (!pFont && pMgr) {
- pPDFFont = NULL;
- pFont = pMgr->GetFont(wsEnglishName, dwFontStyles, &pPDFFont, FALSE);
- if (pFont)
- return pFont;
- }
- if (!pFont && m_pDefFontMgr) {
- pFont = m_pDefFontMgr->GetDefaultFont(hDoc, wsFontFamily, dwFontStyles,
- wCodePage);
- }
- if (pFont) {
- if (pPDFFont) {
- pMgr->m_FDE2PDFFont.SetAt(pFont, pPDFFont);
- pFont->SetFontProvider(pMgr);
- }
- m_FontMap[bsKey] = pFont;
- }
- return pFont;
-}
-void CXFA_FontMgr::LoadDocFonts(IXFA_Doc* hDoc) {
- if (!m_PDFFontMgrArray.GetValueAt(hDoc)) {
- m_PDFFontMgrArray.SetAt(hDoc, new CXFA_PDFFontMgr((CXFA_FFDoc*)hDoc));
- }
-}
-void CXFA_FontMgr::ReleaseDocFonts(IXFA_Doc* hDoc) {
- CXFA_PDFFontMgr* pMgr = NULL;
- if (m_PDFFontMgrArray.Lookup(hDoc, (void*&)pMgr)) {
- if (pMgr != NULL) {
- delete pMgr;
- }
- m_PDFFontMgrArray.RemoveKey(hDoc);
- }
-}
-void CXFA_FontMgr::DelAllMgrMap() {
- FX_POSITION ps = m_PDFFontMgrArray.GetStartPosition();
- while (ps) {
- IXFA_Doc* hDoc = NULL;
- CXFA_PDFFontMgr* pMgr = NULL;
- m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr);
- if (pMgr != NULL) {
- delete pMgr;
- }
- }
- m_PDFFontMgrArray.RemoveAll();
- m_FontMap.clear();
-}
-void CXFA_FontMgr::SetDefFontMgr(IXFA_FontMgr* pFontMgr) {
- m_pDefFontMgr = pFontMgr;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fontmgr.h"
+#include "xfa_ffdoc.h"
+#include "xfa_ffConfigAcc.h"
+#include "xfa_ffapp.h"
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+static const XFA_FONTINFO g_XFAFontsMap[] = {
+ {0x01d5d33e, L"SimSun", L"Arial", 0, 936},
+ {0x01e4f102, L"YouYuan", L"Arial", 1, 936},
+ {0x030549dc, L"LiSu", L"Arial", 1, 936},
+ {0x032edd44, L"Simhei", L"Arial", 1, 936},
+ {0x03eac6fc, L"PoorRichard-Regular", L"Arial", 2, 1252},
+ {0x03ed90e6, L"Nina", L"Arial", 0, 1252},
+ {0x077b56b3, L"KingsoftPhoneticPlain", L"Arial", 0, 1252},
+ {0x078ed524, L"MicrosoftSansSerif", L"Arial", 0, 1252},
+ {0x089b18a9, L"Arial", L"Arial", 0, 1252},
+ {0x0b2cad72, L"MonotypeCorsiva", L"Arial", 8, 1252},
+ {0x0bb003e7, L"Kartika", L"Arial", 2, 1252},
+ {0x0bb469df, L"VinerHandITC", L"Arial", 8, 1252},
+ {0x0bc1a851, L"SegoeUI", L"Arial", 0, 1252},
+ {0x0c112ebd, L"KozukaGothicPro-VIM", L"Arial", 0, 1252},
+ {0x0cfcb9c1, L"AdobeThai", L"Kokila,Arial Narrow", 0, 847},
+ {0x0e7de0f9, L"Playbill", L"Arial", 0, 1252},
+ {0x0eff47c3, L"STHupo", L"Arial", 0, 936},
+ {0x107ad374, L"Constantia", L"Arial", 2, 1252},
+ {0x12194c2d, L"KunstlerScript", L"Arial", 8, 1252},
+ {0x135ef6a1, L"MinionProSmBd",
+ L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
+ {0x158c4049, L"Garamond", L"Arial", 2, 1252},
+ {0x160ecb24, L"STZhongsong", L"Arial", 0, 936},
+ {0x161ed07e, L"MSGothic", L"Arial", 1, 1252},
+ {0x171d1ed1, L"SnapITC-Regular", L"Arial", 0, 1252},
+ {0x18d1188f, L"Cambria", L"Arial", 2, 1252},
+ {0x18eaf350, L"ArialUnicodeMS", L"Arial", 0, 936},
+ {0x1a92d115, L"MingLiU", L"Arial", 1, 1252},
+ {0x1cc217c6, L"TrebuchetMS", L"Arial", 0, 1252},
+ {0x1d649596, L"BasemicTimes", L"Arial", 0, 1252},
+ {0x1e34ee60, L"BellMT", L"Arial", 2, 1252},
+ {0x1eb36945, L"CooperBlack", L"Arial", 2, 1252},
+ {0x1ef7787d, L"BatangChe", L"Arial", 1, 1252},
+ {0x20b3bd3a, L"BrushScriptMT", L"Arial", 8, 1252},
+ {0x220877aa, L"Candara", L"Arial", 0, 1252},
+ {0x22135007, L"FreestyleScript-Regular", L"Arial", 8, 1252},
+ {0x251059c3, L"Chiller", L"Arial", 0, 1252},
+ {0x25bed6dd, L"MSReferenceSansSerif", L"Arial", 0, 1252},
+ {0x28154c81, L"Parchment-Regular", L"Arial", 8, 1252},
+ {0x29711eb9, L"STLiti", L"Arial", 0, 936},
+ {0x2b1993b4, L"Basemic", L"Arial", 0, 1252},
+ {0x2b316339, L"NiagaraSolid-Reg", L"Arial", 0, 1252},
+ {0x2c147529, L"FootlightMTLight", L"Arial", 0, 1252},
+ {0x2c198928, L"HarlowSolid", L"Arial", 0, 1252},
+ {0x2c6ac6b2, L"LucidaBright", L"Arial", 2, 1252},
+ {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"Arial", 0, 1252},
+ {0x2d5a47b0, L"STCaiyun", L"Arial", 0, 936},
+ {0x2def26bf, L"BernardMT-Condensed", L"Arial", 0, 1252},
+ {0x2fd8930b, L"KozukaMinchoPr6NR", L"Arial", 0, 1252},
+ {0x3115525a, L"FangSong_GB2312", L"Arial", 0, 1252},
+ {0x31327817, L"MyriadPro",
+ L"Calibri,Corbel,Candara,Cambria Math,Franklin Gothic Medium,Arial "
+ L"Narrow,Times New Roman",
+ 0, 1252},
+ {0x32244975, L"Helvetica", L"Arial", 0, 1252},
+ {0x32ac995c, L"Terminal", L"Arial", 0, 1252},
+ {0x338d648a, L"NiagaraEngraved-Reg", L"Arial", 0, 1252},
+ {0x33bb65f2, L"Sylfaen", L"Arial", 2, 1252},
+ {0x3402c30e, L"MSPMincho", L"Arial", 2, 1252},
+ {0x3412bf31, L"SimSun-PUA", L"Arial", 0, 936},
+ {0x36eb39b9, L"BerlinSansFB", L"Arial", 0, 1252},
+ {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
+ {0x3864c4f6, L"HighTowerText", L"Arial", 2, 1252},
+ {0x3a257d03, L"FangSong_GB2312", L"Arial", 0, 1252},
+ {0x3cdae668, L"FreestyleScript", L"Arial", 8, 1252},
+ {0x3d55aed7, L"Jokerman", L"Arial", 0, 1252},
+ {0x3d5b4385, L"PMingLiU", L"Arial", 2, 1252},
+ {0x3d9b7669, L"EstrangeloEdessa", L"Arial", 0, 1252},
+ {0x3e532d74, L"FranklinGothicMedium", L"Arial", 0, 1252},
+ {0x3e6aa32d, L"NSimSun", L"Arial", 1, 936},
+ {0x3f6c36a8, L"Gautami", L"Arial", 0, 1252},
+ {0x3ff32662, L"Chiller-Regular", L"Arial", 0, 1252},
+ {0x409de312, L"ModernNo.20", L"Arial", 2, 1252},
+ {0x41443c5e, L"Georgia", L"Arial", 2, 1252},
+ {0x4160ade5, L"BellGothicStdBlack",
+ L"Arial,Arial Unicode MS,Book Antiqua,Dotum,Georgia", 0, 1252},
+ {0x421976c4, L"Modern-Regular", L"Arial", 2, 1252},
+ {0x422a7252, L"Stencil", L"Arial", 0, 1252},
+ {0x42c8554f, L"Fixedsys", L"Arial", 0, 1252},
+ {0x435cb41d, L"Roman", L"Arial", 0, 1252},
+ {0x47882383, L"CourierNew", L"Arial", 1, 1252},
+ {0x480a2338, L"BerlinSansFBDemi", L"Arial", 0, 1252},
+ {0x480bf7a4, L"CourierStd", L"Courier New,Verdana", 0, 1252},
+ {0x481ad6ed, L"VladimirScript", L"Arial", 8, 1252},
+ {0x4911577a, L"YouYuan", L"Arial", 1, 936},
+ {0x4a788d72, L"STXingkai", L"Arial", 0, 936},
+ {0x4bf88566, L"SegoeCondensed", L"Arial", 0, 1252},
+ {0x4ccf51a4, L"BerlinSansFB-Reg", L"Arial", 0, 1252},
+ {0x4ea967ce, L"GulimChe", L"Arial", 1, 1252},
+ {0x4f68bd79, L"LetterGothicStd", L"Courier New,Verdana", 0, 1252},
+ {0x51a0d0e6, L"KozukaGothicPr6NM", L"Arial", 0, 1252},
+ {0x531b3dea, L"BasemicSymbol", L"Arial", 0, 1252},
+ {0x5333fd39, L"CalifornianFB-Reg", L"Arial", 2, 1252},
+ {0x53561a54, L"FZYTK--GBK1-0", L"Arial", 0, 936},
+ {0x55e0dde6, L"LucidaSansTypewriter", L"Arial", 0, 1252},
+ {0x574d4d3d, L"AdobeArabic", L"Arial Narrow", 0, 1252},
+ {0x5792e759, L"STKaiti", L"Arial", 0, 936},
+ {0x5921978e, L"LucidaSansUnicode", L"Arial", 0, 1252},
+ {0x594e2da4, L"Vrinda", L"Arial", 0, 1252},
+ {0x59baa9a2, L"KaiTi_GB2312", L"Arial", 0, 1252},
+ {0x5cfedf4f, L"BaskOldFace", L"Arial", 0, 1252},
+ {0x5f97921c, L"AdobeMyungjoStdM",
+ L"Batang,Bookman Old Style,Consolas,STZhongsong", 0, 936},
+ {0x5fefbfad, L"Batang", L"Arial", 2, 1252},
+ {0x605342b9, L"DotumChe", L"Arial", 1, 1252},
+ {0x608c5f9a, L"KaiTi_GB2312", L"Arial", 0, 936},
+ {0x61efd0d1, L"MaturaMTScriptCapitals", L"Arial", 0, 1252},
+ {0x626608a9, L"MVBoli", L"Arial", 0, 1252},
+ {0x630501a3, L"SmallFonts", L"Arial", 0, 1252},
+ {0x65d0e2a9, L"FZYTK--GBK1-0", L"Arial", 0, 936},
+ {0x669f29e1, L"FZSTK--GBK1-0", L"Arial", 0, 936},
+ {0x673a9e5f, L"Tunga", L"Arial", 0, 1252},
+ {0x691aa4ce, L"NiagaraSolid", L"Arial", 0, 1252},
+ {0x696259b7, L"Corbel", L"Arial", 0, 1252},
+ {0x696ee9be, L"STXihei", L"Arial", 0, 936},
+ {0x6c59cf69, L"Dotum", L"Arial", 0, 1252},
+ {0x707fa561, L"Gungsuh", L"Arial", 2, 1252},
+ {0x71416bb2, L"ZWAdobeF", L"Arial", 0, 1252},
+ {0x71b41801, L"Verdana", L"Arial", 0, 1252},
+ {0x73f25e4c, L"PalatinoLinotype", L"Arial", 0, 1252},
+ {0x73f4d19f, L"NiagaraEngraved", L"Arial", 0, 1252},
+ {0x74001694, L"MyriadProBlack", L"Book Antiqua,Constantia,Dotum,Georgia", 0,
+ 1252},
+ {0x74b14d8f, L"Haettenschweiler", L"Arial", 0, 1252},
+ {0x74cb44ee, L"NSimSun", L"Arial", 1, 936},
+ {0x76b4d7ff, L"Shruti", L"Arial", 0, 1252},
+ {0x788b3533, L"Webdings", L"Arial", 6, 42},
+ {0x797dde99, L"MSSerif", L"Arial", 0, 1252},
+ {0x7a0f9e9e, L"MSMincho", L"Arial", 1, 1252},
+ {0x7b439caf, L"OldEnglishTextMT", L"Arial", 0, 1252},
+ {0x8213a433, L"LucidaSans-Typewriter", L"Arial", 0, 1252},
+ {0x82fec929, L"AdobeSongStdL",
+ L"Centaur,Calibri,STSong,Bell MT,Garamond,Times New Roman", 0, 936},
+ {0x83581825, L"Modern", L"Arial", 0, 1252},
+ {0x835a2823, L"Algerian", L"Arial", 0, 1252},
+ {0x83dab9f5, L"Script", L"Arial", 0, 1252},
+ {0x847b56da, L"Tahoma", L"Arial", 0, 1252},
+ {0x8a783cb2, L"SimSun-PUA", L"Arial", 0, 1252},
+ {0x8b5cac0e, L"Onyx", L"Arial", 0, 1252},
+ {0x8c6a499e, L"Gulim", L"Arial", 0, 1252},
+ {0x8e0af790, L"JuiceITC", L"Arial", 0, 1252},
+ {0x8e8d43b2, L"Centaur", L"Arial", 2, 1252},
+ {0x8ee4dcca, L"BookshelfSymbol7", L"Arial", 0, 1252},
+ {0x90794800, L"BellGothicStdLight", L"Bell MT,Calibri,Times New Roman", 0,
+ 1252},
+ {0x909b516a, L"Century", L"Arial", 2, 1252},
+ {0x92ae370d, L"MSOutlook", L"Arial", 4, 42},
+ {0x93c9fbf1, L"LucidaFax", L"Arial", 2, 1252},
+ {0x9565085e, L"BookAntiqua", L"Arial", 2, 1252},
+ {0x9856d95d, L"AdobeMingStdL", L"Arial,Arial Unicode MS,Cambria,BatangChe",
+ 0, 949},
+ {0x9bbadd6b, L"ColonnaMT", L"Arial", 0, 1252},
+ {0x9cbd16a4, L"ShowcardGothic-Reg", L"Arial", 0, 1252},
+ {0x9d73008e, L"MSSansSerif", L"Arial", 0, 1252},
+ {0xa0607db1, L"GungsuhChe", L"Arial", 1, 1252},
+ {0xa0bcf6a1, L"LatinWide", L"Arial", 2, 1252},
+ {0xa1429b36, L"Symbol", L"Arial", 6, 42},
+ {0xa1fa5abc, L"Wingdings2", L"Arial", 6, 42},
+ {0xa1fa5abd, L"Wingdings3", L"Arial", 6, 42},
+ {0xa427bad4, L"InformalRoman-Regular", L"Arial", 8, 1252},
+ {0xa8b92ece, L"FZSTK--GBK1-0", L"Arial", 0, 936},
+ {0xa8d83ece, L"CalifornianFB", L"Arial", 2, 1252},
+ {0xaa3e082c, L"Kingsoft-Phonetic", L"Arial", 0, 1252},
+ {0xaa6bcabe, L"HarlowSolidItalic", L"Arial", 0, 1252},
+ {0xade5337c, L"MSUIGothic", L"Arial", 0, 1252},
+ {0xb08dd941, L"WideLatin", L"Arial", 2, 1252},
+ {0xb207f05d, L"PoorRichard", L"Arial", 2, 1252},
+ {0xb3bc492f, L"JuiceITC-Regular", L"Arial", 0, 1252},
+ {0xb5545399, L"Marlett", L"Arial", 4, 42},
+ {0xb5dd1ebb, L"BritannicBold", L"Arial", 0, 1252},
+ {0xb699c1c5, L"LucidaCalligraphy-Italic", L"Arial", 0, 1252},
+ {0xb725d629, L"TimesNewRoman", L"Arial", 2, 1252},
+ {0xb7eaebeb, L"AdobeHeitiStdR", L"Batang,Century,Dotum", 0, 936},
+ {0xbd29c486, L"BerlinSansFBDemi-Bold", L"Arial", 0, 1252},
+ {0xbe8a8db4, L"BookshelfSymbolSeven", L"Arial", 0, 1252},
+ {0xc16c0118, L"AdobeHebrew", L"Bell MT,Berlin Sans FB,Calibri", 0, 1252},
+ {0xc318b0af, L"MyriadProLight", L"Calibri,STFangsong,Times New Roman", 0,
+ 1252},
+ {0xc65e5659, L"CambriaMath", L"Arial", 2, 1252},
+ {0xc75c8f05, L"LucidaConsole", L"Arial", 1, 1252},
+ {0xca7c35d6, L"Calibri", L"Arial", 0, 1252},
+ {0xcb053f53, L"MicrosoftYaHei", L"Arial", 0, 936},
+ {0xcb7190f9, L"Magneto-Bold", L"Arial", 0, 1252},
+ {0xcca00cc5, L"System", L"Arial", 0, 1252},
+ {0xccad6f76, L"Jokerman-Regular", L"Arial", 0, 1252},
+ {0xccc5818c, L"EuroSign", L"Arial", 0, 1252},
+ {0xcf3d7234, L"LucidaHandwriting-Italic", L"Arial", 0, 1252},
+ {0xcf7b8fdb, L"MinionPro",
+ L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
+ {0xcfe5755f, L"Simhei", L"Arial", 1, 936},
+ {0xd011f4ee, L"MSPGothic", L"Arial", 0, 1252},
+ {0xd060e7ef, L"Vivaldi", L"Arial", 8, 1252},
+ {0xd07edec1, L"FranklinGothic-Medium", L"Arial", 0, 1252},
+ {0xd107243f, L"SimSun", L"Arial", 0, 936},
+ {0xd1881562, L"ArialNarrow", L"Arial Narrow", 0, 1252},
+ {0xd22b7dce, L"BodoniMTPosterCompressed", L"Arial", 0, 1252},
+ {0xd22bfa60, L"ComicSansMS", L"Arial", 8, 1252},
+ {0xd3bd0e35, L"Bauhaus93", L"Arial", 0, 1252},
+ {0xd429ee7a, L"STFangsong", L"Arial", 0, 936},
+ {0xd6679c12, L"BernardMTCondensed", L"Arial", 0, 1252},
+ {0xd8e8a027, L"LucidaSans", L"Arial", 0, 1252},
+ {0xd9fe7761, L"HighTowerText-Reg", L"Arial", 2, 1252},
+ {0xda7e551e, L"STSong", L"Arial", 0, 936},
+ {0xdaa6842d, L"STZhongsong", L"Arial", 0, 936},
+ {0xdaaab93f, L"STFangsong", L"Arial", 0, 936},
+ {0xdaeb0713, L"STSong", L"Arial", 0, 936},
+ {0xdafedbef, L"STCaiyun", L"Arial", 0, 936},
+ {0xdb00a3d9, L"Broadway", L"Arial", 0, 1252},
+ {0xdb1f5ad4, L"STXinwei", L"Arial", 0, 936},
+ {0xdb326e7f, L"STKaiti", L"Arial", 0, 936},
+ {0xdb69595a, L"STHupo", L"Arial", 0, 936},
+ {0xdba0082c, L"STXihei", L"Arial", 0, 936},
+ {0xdbd0ab18, L"STXingkai", L"Arial", 0, 936},
+ {0xdc1a7db1, L"STLiti", L"Arial", 0, 936},
+ {0xdc33075f, L"KristenITC-Regular", L"Arial", 8, 1252},
+ {0xdcc7009c, L"Harrington", L"Arial", 0, 1252},
+ {0xdd712466, L"ArialBlack", L"Arial", 0, 1252},
+ {0xdde87b3e, L"Impact", L"Arial", 0, 1252},
+ {0xdf69fb32, L"SnapITC", L"Arial", 0, 1252},
+ {0xdf8b25e8, L"CenturyGothic", L"Arial", 0, 1252},
+ {0xe0f705c0, L"KristenITC", L"Arial", 8, 1252},
+ {0xe1427573, L"Raavi", L"Arial", 0, 1252},
+ {0xe2cea0cb, L"Magneto", L"Arial", 0, 1252},
+ {0xe36a9e17, L"Ravie", L"Arial", 0, 1252},
+ {0xe433f8e2, L"Parchment", L"Arial", 8, 1252},
+ {0xe43dff4a, L"Wingdings", L"Arial", 4, 42},
+ {0xe4e2c405, L"MTExtra", L"Arial", 6, 42},
+ {0xe618cc35, L"InformalRoman", L"Arial", 8, 1252},
+ {0xe6c27ffc, L"Mistral", L"Arial", 8, 1252},
+ {0xe7ebf4b9, L"Courier", L"Courier New", 0, 1252},
+ {0xe8bc4a9d, L"MSReferenceSpecialty", L"Arial", 0, 1252},
+ {0xe90fb013, L"TempusSansITC", L"Arial", 0, 1252},
+ {0xec637b42, L"Consolas", L"Verdana", 1, 1252},
+ {0xed3a683b, L"STXinwei", L"Arial", 0, 936},
+ {0xef264cd1, L"LucidaHandwriting", L"Arial", 0, 1252},
+ {0xf086bca2, L"BaskervilleOldFace", L"Arial", 0, 1252},
+ {0xf1028030, L"Mangal", L"Arial", 2, 1252},
+ {0xf1da7eb9, L"ShowcardGothic", L"Arial", 0, 1252},
+ {0xf210f06a, L"ArialMT", L"Arial", 0, 1252},
+ {0xf477f16a, L"Latha", L"Arial", 0, 1252},
+ {0xf616f3dd, L"LiSu", L"Arial", 1, 936},
+ {0xfa479aa6, L"MicrosoftYaHei", L"Arial", 0, 936},
+ {0xfcd19697, L"BookmanOldStyle", L"Arial", 0, 1252},
+ {0xfe209a82, L"LucidaCalligraphy", L"Arial", 0, 1252},
+ {0xfef135f8, L"AdobeHeitiStd-Regular", L"Batang,Century,Dotum", 0, 936},
+};
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
+static const XFA_FONTINFO g_XFAFontsMap[] = {
+ {0x01d5d33e, L"SimSun",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
+ L"PL UMing TW MBE",
+ 0, 936},
+ {0x01e4f102, L"YouYuan",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
+ L"PL UMing TW MBE",
+ 1, 936},
+ {0x030549dc, L"LiSu",
+ L"WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei "
+ L"Mono,WenQuanYi Micro Hei",
+ 1, 936},
+ {0x032edd44, L"Simhei",
+ L"WenQuanYi Zen Hei,WenQuanYi Zen Hei Sharp,WenQuanYi Zen Hei "
+ L"Mono,WenQuanYi Micro Hei",
+ 1, 936},
+ {0x03eac6fc, L"PoorRichard-Regular", L"Droid Sans Japanese,FreeSerif", 2,
+ 1252},
+ {0x03ed90e6, L"Nina", L"FreeSerif", 0, 1252},
+ {0x077b56b3, L"KingsoftPhoneticPlain",
+ L"Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans Thai,Droid Sans "
+ L"Armenian,Untitled1,utkal,Lohit Oriya",
+ 0, 1252},
+ {0x078ed524, L"MicrosoftSansSerif",
+ L"Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei", 0, 1252},
+ {0x089b18a9, L"Arial",
+ L"Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif,WenQuanYi Micro Hei",
+ 0, 1252},
+ {0x0b2cad72, L"MonotypeCorsiva", L"Droid Sans Japanese,FreeSerif", 8, 1252},
+ {0x0bb003e7, L"Kartika",
+ L"FreeSans,Liberation Sans,Liberation Sans Narrow,Nimbus Sans "
+ L"L,Garuda,FreeSerif,WenQuanYi Micro Hei",
+ 2, 1252},
+ {0x0bb469df, L"VinerHandITC",
+ L"Droid Sans Japanese,Ubuntu,Liberation Sans,Liberation Serif", 8, 1252},
+ {0x0bc1a851, L"SegoeUI", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
+ {0x0c112ebd, L"KozukaGothicPro-VIM", L"FreeSerif", 0, 1252},
+ {0x0cfcb9c1, L"AdobeThai", L"Droid Sans Japanese,Waree", 0, 847},
+ {0x0e7de0f9, L"Playbill",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
+ L"Sans Ethiopic,Droid Sans Japanese,FreeSerif",
+ 0, 1252},
+ {0x0eff47c3, L"STHupo", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0x107ad374, L"Constantia",
+ L"Droid Sans Japanese,FreeSerif,WenQuanYi Micro Hei,Ubuntu", 2, 1252},
+ {0x12194c2d, L"KunstlerScript", L"Droid Sans Japanese,Liberation Serif", 8,
+ 1252},
+ {0x135ef6a1, L"MinionProSmBd", L"Liberation Serif", 0, 1252},
+ {0x158c4049, L"Garamond",
+ L"Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 2, 1252},
+ {0x160ecb24, L"STZhongsong",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x161ed07e, L"MSGothic",
+ L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,AR PL "
+ L"UMing CN,AR PL UMing HK,AR PL UMing TW",
+ 1, 1252},
+ {0x171d1ed1, L"SnapITC-Regular",
+ L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Sans", 0,
+ 1252},
+ {0x18d1188f, L"Cambria", L"Droid Sans Japanese,FreeSerif,FreeMono", 2,
+ 1252},
+ {0x18eaf350, L"ArialUnicodeMS",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x1a92d115, L"MingLiU",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 1, 1252},
+ {0x1cc217c6, L"TrebuchetMS",
+ L"Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0, 1252},
+ {0x1d649596, L"BasemicTimes",
+ L"Liberation Serif,Times New Roman,Droid Sans Japanese,FreeSerif,Ubuntu",
+ 0, 1252},
+ {0x1e34ee60, L"BellMT",
+ L"KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252},
+ {0x1eb36945, L"CooperBlack",
+ L"KacstQurn,Droid Sans Japanese,FreeMono,Liberation Mono, WenQuanYi Micro "
+ L"Hei Mono",
+ 2, 1252},
+ {0x1ef7787d, L"BatangChe",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing "
+ L"TW,WenQuanYi Zen Hei,WenQuanYi Micro Hei",
+ 1, 1252},
+ {0x20b3bd3a, L"BrushScriptMT",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
+ L"Japanese,URW Chancery L,Liberation Sans",
+ 8, 1252},
+ {0x220877aa, L"Candara", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
+ {0x22135007, L"FreestyleScript-Regular",
+ L"KacstQurn,Droid Sans Japanese,Liberation Sans", 8, 1252},
+ {0x251059c3, L"Chiller",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
+ L"Japanese,Liberation Sans",
+ 0, 1252},
+ {0x25bed6dd, L"MSReferenceSansSerif",
+ L"DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,AR PL UKai "
+ L"HK",
+ 0, 1252},
+ {0x28154c81, L"Parchment-Regular", L"Droid Sans Japanese,Liberation Sans",
+ 8, 1252},
+ {0x29711eb9, L"STLiti", L"AR PL UKai HK", 0, 936},
+ {0x2b1993b4, L"Basemic",
+ L"Liberation Serif,Droid Sans Japanese,Liberation Sans", 0, 1252},
+ {0x2b316339, L"NiagaraSolid-Reg", L"Droid Sans Japanese,Liberation Sans", 0,
+ 1252},
+ {0x2c147529, L"FootlightMTLight",
+ L"KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252},
+ {0x2c198928, L"HarlowSolid",
+ L"KacstQurn,Droid Sans Japanese,Liberation Sans", 0, 1252},
+ {0x2c6ac6b2, L"LucidaBright",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
+ L"Sans Japanese,Liberation Sans",
+ 2, 1252},
+ {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"DejaVu Sans", 0, 1252},
+ {0x2d5a47b0, L"STCaiyun", L"AR PL UKai HK", 0, 936},
+ {0x2def26bf, L"BernardMT-Condensed",
+ L"KacstQurn,Droid Sans Japanese,DejaVu Serif", 0, 1252},
+ {0x2fd8930b, L"KozukaMinchoPr6NR", L"DejaVu Serif", 0, 1252},
+ {0x3115525a, L"FangSong_GB2312",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 1252},
+ {0x31327817, L"MyriadPro",
+ L"Ubuntu Condensed,Droid Sans Japanese, FreeSerif", 0, 1252},
+ {0x32244975, L"Helvetica",
+ L"Ubuntu,DejaVu Sans Condensed,Liberation Sans,Liberation Sans "
+ L"Narrow,Nimbus Sans L",
+ 0, 1252},
+ {0x32ac995c, L"Terminal", L"DejaVu Serif", 0, 1252},
+ {0x338d648a, L"NiagaraEngraved-Reg", L"Droid Sans Japanese,DejaVu Serif", 0,
+ 1252},
+ {0x33bb65f2, L"Sylfaen", L"Droid Sans Japanese,DejaVu Sans", 2, 1252},
+ {0x3402c30e, L"MSPMincho",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 2,
+ 1252},
+ {0x3412bf31, L"SimSun-PUA",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing CN,AR PL UMing HK", 0,
+ 936},
+ {0x36eb39b9, L"BerlinSansFB",
+ L"Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0, 1252},
+ {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
+ {0x3864c4f6, L"HighTowerText", L"Droid Sans Japanese,DejaVu Serif", 2,
+ 1252},
+ {0x3a257d03, L"FangSong_GB2312",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei", 0, 1252},
+ {0x3c7d1d07, L"Garamond3LTStd",
+ L"Droid Sans Japanese,Ubuntu Condensed,DejaVu Sans Condensed,Liberation "
+ L"Serif,Ubuntu,FreeSerif",
+ 2, 1252},
+ {0x3cdae668, L"FreestyleScript",
+ L"KacstQurn,Droid Sans Japanese,DejaVu Sans", 8, 1252},
+ {0x3d55aed7, L"Jokerman", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
+ {0x3d5b4385, L"PMingLiU",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 2, 1252},
+ {0x3d9b7669, L"EstrangeloEdessa", L"Droid Sans Japanese,DejaVu Sans", 0,
+ 1252},
+ {0x3e532d74, L"FranklinGothicMedium", L"Droid Sans Japanese,Ubuntu", 0,
+ 1252},
+ {0x3e6aa32d, L"NSimSun",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 1, 936},
+ {0x3f6c36a8, L"Gautami",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic, mry_KacstQurn,Droid Sans "
+ L"Japanese,FreeSans",
+ 0, 1252},
+ {0x3ff32662, L"Chiller-Regular",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,FreeSans", 0, 1252},
+ {0x409de312, L"ModernNo.20",
+ L"KacstQurn,Droid Sans Japanese,Nimbus Sans L,Nimbus Sans L,FreeSans", 2,
+ 1252},
+ {0x41443c5e, L"Georgia", L"Droid Sans Japanese,FreeSans", 2, 1252},
+ {0x4160ade5, L"BellGothicStdBlack", L"FreeSans", 0, 1252},
+ {0x421976c4, L"Modern-Regular", L"FreeSans", 2, 1252},
+ {0x422a7252, L"Stencil", L"Droid Sans Japanese,FreeSans,Liberation Sans", 0,
+ 1252},
+ {0x42c8554f, L"Fixedsys", L"FreeSerif", 0, 1252},
+ {0x435cb41d, L"Roman", L"FreeSerif", 0, 1252},
+ {0x47882383, L"CourierNew",
+ L"FreeMono,WenQuanYi Micro Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL "
+ L"UKai TW,AR PL UKai TW MBE,DejaVu Sans",
+ 1, 1252},
+ {0x480a2338, L"BerlinSansFBDemi", L"Droid Sans Japanese,Liberation Serif",
+ 0, 1252},
+ {0x480bf7a4, L"CourierStd", L"DejaVu Sans", 0, 1252},
+ {0x481ad6ed, L"VladimirScript", L"Droid Sans Japanese,DejaVu Serif", 8,
+ 1252},
+ {0x4911577a, L"YouYuan",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
+ 936},
+ {0x4a788d72, L"STXingkai", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0x4bf88566, L"SegoeCondensed", L"FreeSerif", 0, 1252},
+ {0x4ccf51a4, L"BerlinSansFB-Reg", L"Droid Sans Japanese,Liberation Serif",
+ 0, 1252},
+ {0x4ea967ce, L"GulimChe",
+ L"WenQuanYi Zen Hei Mono,AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL "
+ L"UKai TW MBE",
+ 1, 1252},
+ {0x4f68bd79, L"LetterGothicStd",
+ L"FreeMono,Liberation Mono,Andale Mono,WenQuanYi Micro Hei Mono", 0, 1252},
+ {0x51a0d0e6, L"KozukaGothicPr6NM", L"FreeSerif", 0, 1252},
+ {0x531b3dea, L"BasemicSymbol", L"FreeSerif", 0, 1252},
+ {0x5333fd39, L"CalifornianFB-Reg",
+ L"Droid Sans Japanese,URW Chancery L,FreeSerif", 2, 1252},
+ {0x53561a54, L"FZYTK--GBK1-0",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x55e0dde6, L"LucidaSansTypewriter",
+ L"Ubuntu Mono,DejaVu Sans Mono,Nimbus Mono L,Liberation Mono,Courier 10 "
+ L"Pitch,FreeMono",
+ 0, 1252},
+ {0x574d4d3d, L"AdobeArabic", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
+ {0x5792e759, L"STKaiti", L"WenQuanYi Micro Hei Mono", 0, 936},
+ {0x5921978e, L"LucidaSansUnicode", L"Droid Sans Japanese,DejaVu Sans", 0,
+ 1252},
+ {0x594e2da4, L"Vrinda",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Arabic "
+ L"Naskh,mry_KacstQurn,Droid Sans Japanese,FreeSans,FreeSerif",
+ 0, 1252},
+ {0x59baa9a2, L"KaiTi_GB2312",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 1252},
+ {0x5cfedf4f, L"BaskOldFace",
+ L"KacstQurn,Droid Sans Japanese,Ubuntu,Liberation Serif", 0, 1252},
+ {0x5e16ac91, L"TrajanPro",
+ L"Nimbus Sans L,AR PL UMing HK,AR PL UKai HK,AR PL UMing TW,AR PL UMing "
+ L"TW MBE,DejaVu Sans,DejaVu Serif",
+ 0, 1252},
+ {0x5f388196, L"ITCLegacySansStdMedium",
+ L"Liberation Serif,FreeSerif,FreeSans,Ubuntu", 0, 1252},
+ {0x5f97921c, L"AdobeMyungjoStdM",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x5fefbfad, L"Batang",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 2, 1252},
+ {0x605342b9, L"DotumChe",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 1,
+ 1252},
+ {0x608c5f9a, L"KaiTi_GB2312",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x61efd0d1, L"MaturaMTScriptCapitals",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
+ L"Sans Japanese,DejaVu Serif,DejaVu Sans",
+ 0, 1252},
+ {0x626608a9, L"MVBoli",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
+ L"Ethiopic,Droid Sans Japanese,DejaVu Sans",
+ 0, 1252},
+ {0x630501a3, L"SmallFonts", L"DejaVu Serif", 0, 1252},
+ {0x65d0e2a9, L"FZYTK--GBK1-0",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x669f29e1, L"FZSTK--GBK1-0",
+ L"AR PL UMing CN,AR PL UKai CN, AR PL UMing HK", 0, 936},
+ {0x673a9e5f, L"Tunga",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
+ L"Japanese,DejaVu Serif",
+ 0, 1252},
+ {0x691aa4ce, L"NiagaraSolid", L"Droid Sans Japanese,DejaVu Serif", 0, 1252},
+ {0x696259b7, L"Corbel", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
+ {0x696ee9be, L"STXihei", L"WenQuanYi Micro Hei Mono", 0, 936},
+ {0x6c59cf69, L"Dotum", L"WenQuanYi Zen Hei Mono", 0, 1252},
+ {0x707fa561, L"Gungsuh", L"WenQuanYi Zen Hei Mono", 2, 1252},
+ {0x71416bb2, L"ZWAdobeF",
+ L"KacstArt,KacstBookm,KacstDecorative,KacstDigital,KacstFarsi,KacstLetter,"
+ L"KacstOffice,Dingbats,FreeSerif",
+ 0, 1252},
+ {0x71b41801, L"Verdana",
+ L"DejaVu Sans Condensed,Ubuntu Condensed,Droid Sans Japanese,DejaVu Sans",
+ 0, 1252},
+ {0x73f25e4c, L"PalatinoLinotype", L"Droid Sans Japanese,FreeSerif", 0,
+ 1252},
+ {0x73f4d19f, L"NiagaraEngraved", L"Droid Sans Japanese,FreeSerif", 0, 1252},
+ {0x74001694, L"MyriadProBlack", L"Droid Sans Japanese,AR PL UKai HK", 0,
+ 1252},
+ {0x74b14d8f, L"Haettenschweiler", L"Droid Sans Japanese,DejaVu Serif", 0,
+ 1252},
+ {0x74cb44ee, L"NSimSun", L"WenQuanYi Zen Hei Mono", 1, 936},
+ {0x76b4d7ff, L"Shruti",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
+ L"Japanese,FreeSans",
+ 0, 1252},
+ {0x788b3533, L"Webdings", L"FreeSans", 6, 42},
+ {0x797dde99, L"MSSerif", L"FreeSans", 0, 1252},
+ {0x7a0f9e9e, L"MSMincho",
+ L"WenQuanYi Micro Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW",
+ 1, 1252},
+ {0x7b439caf, L"OldEnglishTextMT",
+ L"Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
+ {0x8213a433, L"LucidaSans-Typewriter",
+ L"Ubuntu Mono,Liberation Mono,DejaVu Sans Mono", 0, 1252},
+ {0x82fec929, L"AdobeSongStdL",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0x83581825, L"Modern", L"FreeSans", 0, 1252},
+ {0x835a2823, L"Algerian",
+ L"KacstQurn,Droid Sans Japanese,FreeSans,Liberation Sans,Ubuntu", 0, 1252},
+ {0x83dab9f5, L"Script", L"FreeSans", 0, 1252},
+ {0x847b56da, L"Tahoma",
+ L"Droid Sans Japanese,DejaVu Sans Condensed,FreeSerif", 0, 1252},
+ {0x8a783cb2, L"SimSun-PUA",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 1252},
+ {0x8b5cac0e, L"Onyx", L"Droid Sans Japanese,Liberation Sans", 0, 1252},
+ {0x8c6a499e, L"Gulim",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 1252},
+ {0x8e0af790, L"JuiceITC", L"Droid Sans Japanese,Liberation Sans", 0, 1252},
+ {0x8e8d43b2, L"Centaur",
+ L"KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 2, 1252},
+ {0x8ee4dcca, L"BookshelfSymbol7", L"Liberation Sans", 0, 1252},
+ {0x90794800, L"BellGothicStdLight", L"Liberation Sans", 0, 1252},
+ {0x909b516a, L"Century",
+ L"Droid Sans Japanese,Liberation Sans,Liberation Mono,Liberation Serif", 2,
+ 1252},
+ {0x92ae370d, L"MSOutlook", L"Liberation Sans", 4, 42},
+ {0x93c9fbf1, L"LucidaFax",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans "
+ L"Ethiopic,mry_KacstQurn,Liberation Sans",
+ 2, 1252},
+ {0x9565085e, L"BookAntiqua",
+ L"Droid Sans Japanese,Liberation Sans,Liberation Serif", 2, 1252},
+ {0x9856d95d, L"AdobeMingStdL", L"AR PL UMing HK", 0, 949},
+ {0x9bbadd6b, L"ColonnaMT",
+ L"KacstQurn,Droid Sans Japanese,Khmer OS,Khmer OS System", 0, 1252},
+ {0x9cbd16a4, L"ShowcardGothic-Reg",
+ L"Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
+ {0x9d73008e, L"MSSansSerif", L"FreeSerif", 0, 1252},
+ {0xa0607db1, L"GungsuhChe",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 1, 1252},
+ {0xa0bcf6a1, L"LatinWide", L"FreeSerif", 2, 1252},
+ {0xa1429b36, L"Symbol", L"FreeSerif", 6, 42},
+ {0xa1fa5abc, L"Wingdings2", L"FreeSerif", 6, 42},
+ {0xa1fa5abd, L"Wingdings3", L"FreeSerif", 6, 42},
+ {0xa427bad4, L"InformalRoman-Regular",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
+ L"Japanese,FreeSerif",
+ 8, 1252},
+ {0xa8b92ece, L"FZSTK--GBK1-0", L"AR PL UMing CN", 0, 936},
+ {0xa8d83ece, L"CalifornianFB", L"Droid Sans Japanese,FreeSerif", 2, 1252},
+ {0xaa3e082c, L"Kingsoft-Phonetic",
+ L"Tibetan Machine Uni,LKLUG,Samyak Gujarati,Droid Sans "
+ L"Thai,utkal,Kedage,Mallige,AR PL UKai CN",
+ 0, 1252},
+ {0xaa6bcabe, L"HarlowSolidItalic",
+ L"KacstQurn,Droid Sans Japanese,Liberation Serif", 0, 1252},
+ {0xade5337c, L"MSUIGothic",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 1252},
+ {0xb08dd941, L"WideLatin",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
+ L"Sans Japanese,Liberation Serif",
+ 2, 1252},
+ {0xb12765e0, L"ITCLegacySansStdBook",
+ L"AR PL UMing HK,AR PL UKai HK,FreeSerif,Ubuntu,FreeSans", 0, 1252},
+ {0xb207f05d, L"PoorRichard", L"Droid Sans Japanese,Liberation Serif", 2,
+ 1252},
+ {0xb3bc492f, L"JuiceITC-Regular", L"Droid Sans Japanese,Liberation Serif",
+ 0, 1252},
+ {0xb5545399, L"Marlett", L"Liberation Serif", 4, 42},
+ {0xb5dd1ebb, L"BritannicBold",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans "
+ L"Ethiopic,mry_KacstQurn,Liberation Serif",
+ 0, 1252},
+ {0xb699c1c5, L"LucidaCalligraphy-Italic",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
+ L"Sans Japanese,DejaVu Serif",
+ 0, 1252},
+ {0xb725d629, L"TimesNewRoman", L"Droid Sans Japanese,Liberation Sans", 2,
+ 1252},
+ {0xb7eaebeb, L"AdobeHeitiStdR",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0xbd29c486, L"BerlinSansFBDemi-Bold", L"Droid Sans Japanese,DejaVu Serif",
+ 0, 1252},
+ {0xbe8a8db4, L"BookshelfSymbolSeven", L"DejaVu Sans", 0, 1252},
+ {0xc16c0118, L"AdobeHebrew", L"Droid Sans Japanese,Ubuntu,Liberation Serif",
+ 0, 1252},
+ {0xc318b0af, L"MyriadProLight",
+ L"Droid Sans Japanese,AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 1252},
+ {0xc65e5659, L"CambriaMath", L"Droid Sans Japanese,FreeSerif,FreeMono", 2,
+ 1252},
+ {0xc75c8f05, L"LucidaConsole",
+ L"Liberation Mono,DejaVu Sans Mono,FreeMono,WenQuanYi Micro Hei Mono", 1,
+ 1252},
+ {0xca7c35d6, L"Calibri", L"Droid Sans Japanese,DejaVu Sans", 0, 1252},
+ {0xcb053f53, L"MicrosoftYaHei",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0xcb7190f9, L"Magneto-Bold",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
+ L"Japanese,DejaVu Serif",
+ 0, 1252},
+ {0xcca00cc5, L"System", L"DejaVu Sans", 0, 1252},
+ {0xccad6f76, L"Jokerman-Regular", L"Droid Sans Japanese,DejaVu Sans", 0,
+ 1252},
+ {0xccc5818c, L"EuroSign", L"DejaVu Serif", 0, 1252},
+ {0xcf3d7234, L"LucidaHandwriting-Italic",
+ L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans L,DejaVu Serif", 0,
+ 1252},
+ {0xcf7b8fdb, L"MinionPro", L"DejaVu Sans", 0, 1252},
+ {0xcfe5755f, L"Simhei",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 1, 936},
+ {0xd011f4ee, L"MSPGothic",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW", 0,
+ 1252},
+ {0xd060e7ef, L"Vivaldi",
+ L"KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 8, 1252},
+ {0xd07edec1, L"FranklinGothic-Medium", L"Droid Sans Japanese,Ubuntu", 0,
+ 1252},
+ {0xd107243f, L"SimSun", L"WenQuanYi Zen Hei Mono", 0, 936},
+ {0xd1881562, L"ArialNarrow",
+ L"Liberation Sans Narrow,Droid Sans Japanese,FreeSerif", 0, 1252},
+ {0xd22b7dce, L"BodoniMTPosterCompressed",
+ L"Droid Sans Japanese,DejaVu Serif", 0, 1252},
+ {0xd22bfa60, L"ComicSansMS",
+ L"Droid Sans Japanese,FreeMono,Liberation Mono", 8, 1252},
+ {0xd3bd0e35, L"Bauhaus93",
+ L"KacstQurn,Droid Sans Japanese,Liberation Sans,Ubuntu", 0, 1252},
+ {0xd429ee7a, L"STFangsong", L"WenQuanYi Micro Hei Mono", 0, 936},
+ {0xd6679c12, L"BernardMTCondensed",
+ L"KacstQurn,Droid Sans Japanese,Nimbus Sans L,URW Chancery "
+ L"L,KacstOne,Liberation Sans",
+ 0, 1252},
+ {0xd8e8a027, L"LucidaSans",
+ L"Liberation Sans Narrow,Nimbus Sans L,KacstQurn,Droid Arabic Naskh,Droid "
+ L"Sans Ethiopic,DejaVu Serif Condensed,Liberation Mono,Ubuntu",
+ 0, 1252},
+ {0xd9fe7761, L"HighTowerText-Reg",
+ L"Droid Sans Japanese,Ubuntu,Liberation Serif", 2, 1252},
+ {0xda7e551e, L"STSong", L"WenQuanYi Micro Hei Mono", 0, 936},
+ {0xdaa6842d, L"STZhongsong",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0xdaaab93f, L"STFangsong",
+ L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
+ L"Hei,WenQuanYi Zen Hei Sharp",
+ 0, 936},
+ {0xdaeb0713, L"STSong",
+ L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
+ L"Hei,WenQuanYi Zen Hei Sharp",
+ 0, 936},
+ {0xdafedbef, L"STCaiyun", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0xdb00a3d9, L"Broadway",
+ L"KacstQurn,Droid Sans Japanese,DejaVu Sans,FreeMono,Liberation Mono", 0,
+ 1252},
+ {0xdb1f5ad4, L"STXinwei", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0xdb326e7f, L"STKaiti",
+ L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
+ L"Hei,WenQuanYi Zen Hei Sharp",
+ 0, 936},
+ {0xdb69595a, L"STHupo",
+ L"WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
+ L"Hei,WenQuanYi Zen Hei Sharp",
+ 0, 936},
+ {0xdba0082c, L"STXihei",
+ L" WenQuanYi Micro Hei Mono,WenQuanYi Zen Hei Mono,WenQuanYi Zen "
+ L"Hei,WenQuanYi Zen Hei Sharp",
+ 0, 936},
+ {0xdbd0ab18, L"STXingkai", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0xdc1a7db1, L"STLiti", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0xdc33075f, L"KristenITC-Regular",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans "
+ L"Condensed,Ubuntu,Liberation Sans",
+ 8, 1252},
+ {0xdcc7009c, L"Harrington",
+ L"KacstQurn,Droid Sans Japanese,Liberation Serif,FreeSerif,Ubuntu", 0,
+ 1252},
+ {0xdd712466, L"ArialBlack",
+ L"Droid Sans Japanese,DejaVu Sans,DejaVu Serif,FreeMono", 0, 1252},
+ {0xdde87b3e, L"Impact", L"Droid Sans Japanese,DejaVu Serif", 0, 1252},
+ {0xdf69fb32, L"SnapITC",
+ L"Liberation Sans Narrow,Ubuntu Condensed,DejaVu Sans,DejaVu "
+ L"Serif,FreeMono",
+ 0, 1252},
+ {0xdf8b25e8, L"CenturyGothic",
+ L"Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0,
+ 1252},
+ {0xe0f705c0, L"KristenITC",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu Sans "
+ L"Condensed,Ubuntu,Liberation Sans",
+ 8, 1252},
+ {0xe1427573, L"Raavi",
+ L"Droid Arabic Naskh,Droid Sans "
+ L"Ethiopic,mry_KacstQurn,FreeSerif,Liberation Serif,Khmer OS",
+ 0, 1252},
+ {0xe2cea0cb, L"Magneto",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu "
+ L"Serif,DejaVu Serif Condensed,DejaVu Sans",
+ 0, 1252},
+ {0xe36a9e17, L"Ravie",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,DejaVu "
+ L"Serif,DejaVu Sans,FreeMono",
+ 0, 1252},
+ {0xe433f8e2, L"Parchment", L"Droid Sans Japanese,DejaVu Serif", 8, 1252},
+ {0xe43dff4a, L"Wingdings", L"DejaVu Serif", 4, 42},
+ {0xe4e2c405, L"MTExtra", L"DejaVu Serif", 6, 42},
+ {0xe618cc35, L"InformalRoman",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid Sans "
+ L"Japanese,Nimbus Sans L,DejaVu Sans Condensed,Ubuntu,Liberation Sans",
+ 8, 1252},
+ {0xe6c27ffc, L"Mistral", L"Droid Sans Japanese,DejaVu Serif", 8, 1252},
+ {0xe7ebf4b9, L"Courier", L"DejaVu Sans,DejaVu Sans Condensed,FreeSerif", 0,
+ 1252},
+ {0xe8bc4a9d, L"MSReferenceSpecialty", L"DejaVu Serif", 0, 1252},
+ {0xe90fb013, L"TempusSansITC",
+ L"Droid Sans Japanese,Ubuntu,Liberation Serif,FreeSerif", 0, 1252},
+ {0xec637b42, L"Consolas",
+ L"DejaVu Sans Condensed,AR PL UKai CN,AR PL UKai HK,AR PL UKai "
+ L"TW,FreeSerif,FreeSans",
+ 1, 1252},
+ {0xed3a683b, L"STXinwei", L"AR PL UKai HK,AR PL UMing HK,AR PL UKai CN", 0,
+ 936},
+ {0xef264cd1, L"LucidaHandwriting",
+ L"Liberation Sans Narrow,Ubuntu Condensed,Nimbus Sans "
+ L"L,KacstQurn,Liberation Mono",
+ 0, 1252},
+ {0xf086bca2, L"BaskervilleOldFace",
+ L"KacstQurn,Droid Sans Japanese,Liberation Serif,Ubuntu,FreeSerif", 0,
+ 1252},
+ {0xf1028030, L"Mangal",
+ L"FreeSans,TSCu_Paranar,Garuda,Liberation Sans,Liberation Sans "
+ L"Narrow,Nimbus Sans L",
+ 2, 1252},
+ {0xf1da7eb9, L"ShowcardGothic",
+ L"Droid Sans Japanese,DejaVu Serif Condensed,DejaVu Sans "
+ L"Condensed,Liberation Sans,Ubuntu",
+ 0, 1252},
+ {0xf210f06a, L"ArialMT",
+ L"Liberation Sans,Liberation Sans Narrow,FreeSans,Nimbus Sans L,Khmer OS "
+ L"System,Khmer OS",
+ 0, 1252},
+ {0xf477f16a, L"Latha",
+ L"Liberation Sans Narrow,Nimbus Sans L,Droid Arabic "
+ L"Naskh,mry_KacstQurn,FreeSerif,Nimbus Sans L",
+ 0, 1252},
+ {0xf616f3dd, L"LiSu",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
+ L"PL UMing TW MBE",
+ 1, 936},
+ {0xfa479aa6, L"MicrosoftYaHei",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+ {0xfcd19697, L"BookmanOldStyle",
+ L"Droid Sans Japanese,Liberation Mono,Liberation Sans,Liberation Serif", 0,
+ 1252},
+ {0xfe209a82, L"LucidaCalligraphy",
+ L"KacstQurn,Droid Arabic Naskh,Droid Sans Ethiopic,mry_KacstQurn,Droid "
+ L"Sans Japanese,DejaVu Serif,DejaVu Sans,FreeMono",
+ 0, 1252},
+ {0xfef135f8, L"AdobeHeitiStd-Regular",
+ L"WenQuanYi Zen Hei Mono,WenQuanYi Zen Hei,WenQuanYi Zen Hei "
+ L"Sharp,WenQuanYi Micro Hei",
+ 0, 936},
+};
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+static const XFA_FONTINFO g_XFAFontsMap[] = {
+ {0x01d5d33e, L"SimSun", L"STHeiti,Heiti TC,STFangsong", 0, 936},
+ {0x01e4f102, L"YouYuan", L"STHeiti,Heiti TC,STFangsong", 1, 936},
+ {0x030549dc, L"LiSu", L"STHeiti,Heiti TC,STFangsong", 1, 936},
+ {0x032edd44, L"Simhei", L"STHeiti,Heiti TC,STFangsong", 1, 936},
+ {0x03eac6fc, L"PoorRichard-Regular",
+ L"Noteworthy,Avenir Next Condensed,Impact", 2, 1252},
+ {0x03ed90e6, L"Nina", L"Microsoft Sans Serif", 0, 1252},
+ {0x077b56b3, L"KingsoftPhoneticPlain",
+ L"LastResort,Apple "
+ L"Chancery,STIXVariants,STIXSizeOneSym,STIXSizeOneSym,Apple Braille",
+ 0, 1252},
+ {0x078ed524, L"MicrosoftSansSerif", L"Songti SC,Apple Symbols", 0, 1252},
+ {0x089b18a9, L"Arial",
+ L"Arial Unicode MS,Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x0b2cad72, L"MonotypeCorsiva", L"Arial Narrow,Impact", 8, 1252},
+ {0x0bb003e7, L"Kartika",
+ L"Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Damascus", 2, 1252},
+ {0x0bb469df, L"VinerHandITC", L"Comic Sans MS,Songti SC,STSong", 8, 1252},
+ {0x0bc1a851, L"SegoeUI", L"Apple Symbols", 0, 1252},
+ {0x0c112ebd, L"KozukaGothicPro-VIM", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0x0cfcb9c1, L"AdobeThai", L"Avenir Next Condensed Ultra Light", 0, 847},
+ {0x0e7de0f9, L"Playbill", L"STIXNonUnicode", 0, 1252},
+ {0x0eff47c3, L"STHupo", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
+ {0x107ad374, L"Constantia", L"Arial Unicode MS,Palatino,Baskerville", 2,
+ 1252},
+ {0x12194c2d, L"KunstlerScript",
+ L"Avenir Next Condensed Demi Bold,Arial Narrow", 8, 1252},
+ {0x135ef6a1, L"MinionProSmBd", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x158c4049, L"Garamond", L"Impact,Arial Narrow", 2, 1252},
+ {0x160ecb24, L"STZhongsong", L"STFangsong,Songti SC", 0, 936},
+ {0x161ed07e, L"MSGothic",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing "
+ L"TW,Microsoft Sans Serif,Apple Symbols",
+ 1, 1252},
+ {0x171d1ed1, L"SnapITC-Regular", L"STHeiti,Arial Black", 0, 1252},
+ {0x18d1188f, L"Cambria", L"Arial Unicode MS", 2, 1252},
+ {0x18eaf350, L"ArialUnicodeMS", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 936},
+ {0x1a92d115, L"MingLiU", L"Heiti SC,STHeiti", 1, 1252},
+ {0x1cc217c6, L"TrebuchetMS", L"Damascus,Impact,Arial Narrow", 0, 1252},
+ {0x1d649596, L"BasemicTimes", L"Liberation Serif,Impact,Arial Narrow", 0,
+ 1252},
+ {0x1e34ee60, L"BellMT",
+ L"Papyrus,STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 2, 1252},
+ {0x1eb36945, L"CooperBlack",
+ L"Marion,STIXNonUnicode,Arial Rounded MT Bold,Lucida Grande", 2, 1252},
+ {0x1ef7787d, L"BatangChe",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,,AR PL UMing HK,AR PL UMing TW,AR "
+ L"PL UMing TW MBE,Arial Unicode MS,Heiti TC",
+ 1, 1252},
+ {0x20b3bd3a, L"BrushScriptMT",
+ L"STIXNonUnicode,Damascus,Arial Narrow,Avenir Next Condensed,Cochin", 8,
+ 1252},
+ {0x220877aa, L"Candara", L"Cochin,Baskerville,Marion", 0, 1252},
+ {0x22135007, L"FreestyleScript-Regular",
+ L"STIXNonUnicode,Nadeem,Zapf Dingbats", 8, 1252},
+ {0x251059c3, L"Chiller",
+ L"Zapf Dingbats,Damascus,STIXNonUnicode,Papyrus,KufiStandardGK,Baghdad", 0,
+ 1252},
+ {0x25bed6dd, L"MSReferenceSansSerif",
+ L"Tahoma,Apple Symbols,Apple LiGothic,Arial Unicode MS,Lucida "
+ L"Grande,Microsoft Sans Serif",
+ 0, 1252},
+ {0x28154c81, L"Parchment-Regular", L"Microsoft Sans Serif,Apple Symbols", 8,
+ 1252},
+ {0x29711eb9, L"STLiti", L"Kaiti SC,Songti SC", 0, 936},
+ {0x2b1993b4, L"Basemic", L"Impact,Arial Narrow", 0, 1252},
+ {0x2b316339, L"NiagaraSolid-Reg", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x2c147529, L"FootlightMTLight",
+ L"STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans,Noteworthy", 0, 1252},
+ {0x2c198928, L"HarlowSolid",
+ L"Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0, 1252},
+ {0x2c6ac6b2, L"LucidaBright",
+ L"PT Sans Narrow,Papyrus,Damascus,STIXNonUnicode,Arial Rounded MT "
+ L"Bold,Comic Sans MS,Avenir Next",
+ 2, 1252},
+ {0x2c9f38e2, L"KozukaMinchoPro-VIR", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0x2d5a47b0, L"STCaiyun", L"Kaiti SC,Songti SC", 0, 936},
+ {0x2def26bf, L"BernardMT-Condensed",
+ L"Impact,Avenir Next Condensed Demi Bold,American Typewriter", 0, 1252},
+ {0x2fd8930b, L"KozukaMinchoPr6NR", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x3115525a, L"FangSong_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252},
+ {0x31327817, L"MyriadPro", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x32244975, L"Helvetica",
+ L"Arial Narrow,Arial Unicode MS,Damascus,STIXNonUnicode", 0, 1252},
+ {0x32ac995c, L"Terminal", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x338d648a, L"NiagaraEngraved-Reg", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0x33bb65f2, L"Sylfaen", L"Arial Unicode MS,Marion", 2, 1252},
+ {0x3402c30e, L"MSPMincho", L"Arial Unicode MS,Apple SD Gothic Neo", 2,
+ 1252},
+ {0x3412bf31, L"SimSun-PUA", L"STHeiti,Heiti TC,STFangsong", 0, 936},
+ {0x36eb39b9, L"BerlinSansFB", L"American Typewriter,Impact", 0, 1252},
+ {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
+ {0x3864c4f6, L"HighTowerText", L"STIXGeneral,.Helvetica Neue Desk UI", 2,
+ 1252},
+ {0x3a257d03, L"FangSong_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252},
+ {0x3cdae668, L"FreestyleScript", L"Nadeem,Zapf Dingbats,STIXNonUnicode", 8,
+ 1252},
+ {0x3d55aed7, L"Jokerman",
+ L"Papyrus,Lucida Grande,Heiti TC,American Typewriter", 0, 1252},
+ {0x3d5b4385, L"PMingLiU", L"Heiti SC,STHeiti", 2, 1252},
+ {0x3d9b7669, L"EstrangeloEdessa", L"American Typewriter,Marion", 0, 1252},
+ {0x3e532d74, L"FranklinGothicMedium", L"Impact,Arial Narrow", 0, 1252},
+ {0x3e6aa32d, L"NSimSun", L"STHeiti,STFangsong", 1, 936},
+ {0x3f6c36a8, L"Gautami",
+ L"Damascus,STIXNonUnicode,STIXGeneral,American Typewriter", 0, 1252},
+ {0x3ff32662, L"Chiller-Regular", L"Papyrus,KufiStandardGK,Baghdad", 0,
+ 1252},
+ {0x409de312, L"ModernNo.20", L"Avenir Next Condensed,Impact", 2, 1252},
+ {0x41443c5e, L"Georgia", L".Helvetica Neue Desk UI,Arial Unicode MS", 2,
+ 1252},
+ {0x4160ade5, L"BellGothicStdBlack", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0x421976c4, L"Modern-Regular", L"Impact", 2, 1252},
+ {0x422a7252, L"Stencil", L"STIXNonUnicode,Songti SC,Georgia,Baskerville", 0,
+ 1252},
+ {0x42c8554f, L"Fixedsys", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x435cb41d, L"Roman", L"Arial Narrow", 0, 1252},
+ {0x47882383, L"CourierNew", L"PCMyungjo,Osaka,Arial Unicode MS,Songti SC",
+ 1, 1252},
+ {0x480a2338, L"BerlinSansFBDemi",
+ L"STIXNonUnicode,American Typewriter,Avenir Next Condensed Heavy", 0,
+ 1252},
+ {0x480bf7a4, L"CourierStd", L"Courier New", 0, 1252},
+ {0x481ad6ed, L"VladimirScript",
+ L"STIXNonUnicode,Avenir Next Condensed,Impact", 8, 1252},
+ {0x4911577a, L"YouYuan", L"STHeiti,Heiti TC", 1, 936},
+ {0x4a788d72, L"STXingkai", L"Kaiti SC,Songti SC", 0, 936},
+ {0x4bf88566, L"SegoeCondensed", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x4ccf51a4, L"BerlinSansFB-Reg",
+ L"STIXNonUnicode,American Typewriter,Impact", 0, 1252},
+ {0x4ea967ce, L"GulimChe", L"Arial Unicode MS,Heiti TC,STFangsong", 1, 1252},
+ {0x4f68bd79, L"LetterGothicStd",
+ L"Courier New,Andale Mono,Ayuthaya,PCMyungjo,Osaka", 0, 1252},
+ {0x51a0d0e6, L"KozukaGothicPr6NM", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x531b3dea, L"BasemicSymbol", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x5333fd39, L"CalifornianFB-Reg",
+ L"American Typewriter,Avenir Next Condensed,Impact", 2, 1252},
+ {0x53561a54, L"FZYTK--GBK1-0", L"STFangsong,Songti SC,STSong", 0, 936},
+ {0x55e0dde6, L"LucidaSansTypewriter", L"Menlo,Courier New,Andale Mono", 0,
+ 1252},
+ {0x574d4d3d, L"AdobeArabic", L"Arial Narrow", 0, 1252},
+ {0x5792e759, L"STKaiti", L"Songti SC,Arial Unicode MS", 0, 936},
+ {0x5921978e, L"LucidaSansUnicode", L"Lucida Grande,Arial Unicode MS,Menlo",
+ 0, 1252},
+ {0x594e2da4, L"Vrinda", L"Geeza Pro,Damascus,STIXGeneral,Gill Sans", 0,
+ 1252},
+ {0x59baa9a2, L"KaiTi_GB2312", L"Hiragino Sans GB,STHeiti", 0, 1252},
+ {0x5cfedf4f, L"BaskOldFace",
+ L"Avenir Next Condensed Heavy,PT Sans,Avenir Next Condensed", 0, 1252},
+ {0x5e16ac91, L"TrajanPro", L"Arial Narrow,PT Sans Narrow,Damascus", 0,
+ 1252},
+ {0x5f97921c, L"AdobeMyungjoStdM",
+ L"AppleMyungjo,AppleGothic,Arial Unicode MS", 0, 936},
+ {0x5fefbfad, L"Batang", L"Arial Unicode MS,Songti SC", 2, 1252},
+ {0x605342b9, L"DotumChe", L"Arial Unicode MS,Heiti TC", 1, 1252},
+ {0x608c5f9a, L"KaiTi_GB2312", L"Hiragino Sans GB,STHeiti,Heiti TC", 0, 936},
+ {0x61efd0d1, L"MaturaMTScriptCapitals",
+ L"Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black,Avenir Next Heavy",
+ 0, 1252},
+ {0x626608a9, L"MVBoli",
+ L"Apple Braille,Geeza Pro,Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x630501a3, L"SmallFonts", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x65d0e2a9, L"FZYTK--GBK1-0", L"STFangsong,Songti SC,STSong", 0, 936},
+ {0x669f29e1, L"FZSTK--GBK1-0", L"STHeiti,Heiti TC", 0, 936},
+ {0x673a9e5f, L"Tunga",
+ L"Damascus,STIXNonUnicode,Avenir Next Condensed,Avenir Next Condensed "
+ L"Ultra Light,Futura",
+ 0, 1252},
+ {0x691aa4ce, L"NiagaraSolid", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x696259b7, L"Corbel", L"Cochin,Baskerville,Marion", 0, 1252},
+ {0x696ee9be, L"STXihei", L"STHeiti,Heiti TC,Songti SC,Arial Unicode MS", 0,
+ 936},
+ {0x6c59cf69, L"Dotum", L"Arial Unicode MS,Songti SC", 0, 1252},
+ {0x707fa561, L"Gungsuh", L"Arial Unicode MS,Heiti TC", 2, 1252},
+ {0x71416bb2, L"ZWAdobeF",
+ L"STIXSizeFourSym,STIXSizeThreeSym,STIXSizeTwoSym,STIXSizeOneSym", 0,
+ 1252},
+ {0x71b41801, L"Verdana",
+ L"Tahoma,Marion,Apple Symbols,.Helvetica Neue Desk UI,Lucida "
+ L"Grande,Courier New",
+ 0, 1252},
+ {0x73f25e4c, L"PalatinoLinotype", L"Palatino,Arial Unicode MS", 0, 1252},
+ {0x73f4d19f, L"NiagaraEngraved", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x74001694, L"MyriadProBlack", L"Palatino,Baskerville,Marion,Cochin", 0,
+ 1252},
+ {0x74b14d8f, L"Haettenschweiler", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x74cb44ee, L"NSimSun", L"STHeiti,Heiti TC,STFangsong", 1, 936},
+ {0x76b4d7ff, L"Shruti",
+ L"Damascus,STIXNonUnicode,Arial Unicode MS,American Typewriter", 0, 1252},
+ {0x788b3533, L"Webdings", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
+ {0x797dde99, L"MSSerif", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x7a0f9e9e, L"MSMincho",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
+ L"PL UMing TW MBE,Arial Unicode MS,Apple SD Gothic Neo",
+ 1, 1252},
+ {0x7b439caf, L"OldEnglishTextMT",
+ L"STIXNonUnicode,Arial Unicode MS,Baskerville,Avenir Next Medium", 0,
+ 1252},
+ {0x8213a433, L"LucidaSans-Typewriter",
+ L"Comic Sans MS,Avenir Next,Arial Rounded MT Bold", 0, 1252},
+ {0x82fec929, L"AdobeSongStdL", L"Heiti TC,STHeiti", 0, 936},
+ {0x83581825, L"Modern", L"Avenir Next Condensed,Impact", 0, 1252},
+ {0x835a2823, L"Algerian",
+ L"STIXNonUnicode,Baskerville,Avenir Next Medium,American Typewriter", 0,
+ 1252},
+ {0x83dab9f5, L"Script", L"Arial Narrow", 0, 1252},
+ {0x847b56da, L"Tahoma", L"Songti SC,Apple Symbols", 0, 1252},
+ {0x8a783cb2, L"SimSun-PUA", L"STHeiti,Heiti TC,STFangsong", 0, 1252},
+ {0x8b5cac0e, L"Onyx", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0x8c6a499e, L"Gulim", L"Arial Unicode MS,Songti SC", 0, 1252},
+ {0x8e0af790, L"JuiceITC", L"Nadeem,Al Bayan", 0, 1252},
+ {0x8e8d43b2, L"Centaur", L"Avenir Next Condensed,Noteworthy,Impact", 2,
+ 1252},
+ {0x8ee4dcca, L"BookshelfSymbol7", L"Microsoft Sans Serif,Apple Symbols", 0,
+ 1252},
+ {0x90794800, L"BellGothicStdLight", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0x909b516a, L"Century", L"Damascus,Andale Mono,Songti SC,Arial Unicode MS",
+ 2, 1252},
+ {0x92ae370d, L"MSOutlook", L"Microsoft Sans Serif,Apple Symbols", 4, 42},
+ {0x93c9fbf1, L"LucidaFax",
+ L"PT Sans Narrow,Papyrus,Kokonor,Geeza Pro,Arial Rounded MT Bold,Lucida "
+ L"Grande,Futura",
+ 2, 1252},
+ {0x9565085e, L"BookAntiqua", L"Palatino,Microsoft Sans Serif,Apple Symbols",
+ 2, 1252},
+ {0x9856d95d, L"AdobeMingStdL", L"AHiragino Sans GB,Heiti TC,STHeiti", 0,
+ 949},
+ {0x9bbadd6b, L"ColonnaMT", L"Noteworthy,Avenir Next Condensed,Impact", 0,
+ 1252},
+ {0x9cbd16a4, L"ShowcardGothic-Reg",
+ L"Arial Unicode MS,Georgia,American Typewriter", 0, 1252},
+ {0x9d73008e, L"MSSansSerif", L"Songti SC,Apple Symbols", 0, 1252},
+ {0xa0607db1, L"GungsuhChe",
+ L"WenQuanYi Zen Hei Mono,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR "
+ L"PL UMing TW MBE,Arial Unicode MS,Heiti TC,STFangsong",
+ 1, 1252},
+ {0xa0bcf6a1, L"LatinWide", L"Zapfino,Arial Black,STHeiti", 2, 1252},
+ {0xa1429b36, L"Symbol", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
+ {0xa1fa5abc, L"Wingdings2", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
+ {0xa1fa5abd, L"Wingdings3", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
+ {0xa427bad4, L"InformalRoman-Regular",
+ L"STIXNonUnicode,Arial Narrow,Avenir Next Condensed Demi Bold", 8, 1252},
+ {0xa8b92ece, L"FZSTK--GBK1-0", L"STHeiti,Heiti TC,STFangsong", 0, 936},
+ {0xa8d83ece, L"CalifornianFB",
+ L"American Typewriter,Avenir Next Condensed,Impact", 2, 1252},
+ {0xaa3e082c, L"Kingsoft-Phonetic",
+ L"STIXVariants,STIXSizeOneSym,Apple Braille", 0, 1252},
+ {0xaa6bcabe, L"HarlowSolidItalic",
+ L"STIXNonUnicode,Avenir Medium,Avenir Next Medium,Arial Unicode MS", 0,
+ 1252},
+ {0xade5337c, L"MSUIGothic", L"Arial Unicode MS,Apple SD Gothic Neo", 0,
+ 1252},
+ {0xb08dd941, L"WideLatin",
+ L"Marion,Papyrus,Nanum Pen Script,Zapf Dingbats,Damascus,Zapfino,Arial "
+ L"Black,STHeiti",
+ 2, 1252},
+ {0xb12765e0, L"ITCLegacySansStdBook",
+ L"LastResort,.Helvetica Neue Desk UI,Arial Unicode MS,Palatino", 0, 1252},
+ {0xb207f05d, L"PoorRichard", L"Noteworthy,Avenir Next Condensed,Impact", 2,
+ 1252},
+ {0xb3bc492f, L"JuiceITC-Regular", L"Nadeem,Al Bayan,STIXNonUnicode", 0,
+ 1252},
+ {0xb5545399, L"Marlett", L"Microsoft Sans Serif,Apple Symbols", 4, 42},
+ {0xb5dd1ebb, L"BritannicBold",
+ L"Damascus,STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252},
+ {0xb699c1c5, L"LucidaCalligraphy-Italic", L"STHeiti,Arial Black", 0, 1252},
+ {0xb725d629, L"TimesNewRoman", L"Microsoft Sans Serif,Apple Symbols", 2,
+ 1252},
+ {0xb7eaebeb, L"AdobeHeitiStdR", L"Heiti TC,STHeiti", 0, 936},
+ {0xbd29c486, L"BerlinSansFBDemi-Bold",
+ L"American Typewriter,Avenir Next Condensed Heavy", 0, 1252},
+ {0xbe8a8db4, L"BookshelfSymbolSeven", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0xc16c0118, L"AdobeHebrew",
+ L".Helvetica Neue Desk UI,Palatino,American Typewriter", 0, 1252},
+ {0xc318b0af, L"MyriadProLight", L"Palatino,Baskerville,Marion", 0, 1252},
+ {0xc65e5659, L"CambriaMath", L"Arial Unicode MS", 2, 1252},
+ {0xc75c8f05, L"LucidaConsole", L"Courier New,Menlo,Andale Mono", 1, 1252},
+ {0xca7c35d6, L"Calibri", L"Apple Symbols,HeadLineA", 0, 1252},
+ {0xcb053f53, L"MicrosoftYaHei", L"Arial Unicode MS", 0, 936},
+ {0xcb7190f9, L"Magneto-Bold", L"Lucida Grande", 0, 1252},
+ {0xcca00cc5, L"System", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0xccad6f76, L"Jokerman-Regular", L"Lucida Grande", 0, 1252},
+ {0xccc5818c, L"EuroSign", L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0xcf3d7234, L"LucidaHandwriting-Italic",
+ L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0xcf7b8fdb, L"MinionPro",
+ L"Bell MT,Corbel,Times New Roman,Cambria,Berlin Sans FB", 0, 1252},
+ {0xcfe5755f, L"Simhei", L"STHeiti,Heiti TC,STFangsong", 1, 936},
+ {0xd011f4ee, L"MSPGothic", L"Arial Unicode MS,Apple SD Gothic Neo", 0,
+ 1252},
+ {0xd060e7ef, L"Vivaldi",
+ L"STIXNonUnicode,Arial Unicode MS,Avenir Medium,Avenir Next Medium", 8,
+ 1252},
+ {0xd07edec1, L"FranklinGothic-Medium", L"Impact,Arial Narrow", 0, 1252},
+ {0xd107243f, L"SimSun", L"STHeiti,Heiti TC,STFangsong", 0, 936},
+ {0xd1881562, L"ArialNarrow", L"PT Sans Narrow,Apple Symbols", 0, 1252},
+ {0xd22b7dce, L"BodoniMTPosterCompressed",
+ L"Microsoft Sans Serif,Apple Symbols", 0, 1252},
+ {0xd22bfa60, L"ComicSansMS",
+ L"Damascus,Georgia,.Helvetica Neue Desk UI,Lucida Grande,Arial Unicode MS",
+ 8, 1252},
+ {0xd3bd0e35, L"Bauhaus93",
+ L"STIXNonUnicode,Arial Unicode MS,Avenir Next,Avenir", 0, 1252},
+ {0xd429ee7a, L"STFangsong", L"Songti SC,Arial Unicode MS", 0, 936},
+ {0xd6679c12, L"BernardMTCondensed",
+ L"Impact,Avenir Next Condensed Demi Bold", 0, 1252},
+ {0xd8e8a027, L"LucidaSans",
+ L"Arial Narrow,Khmer MN,Kokonor,Damascus,Microsoft Sans Serif,Apple "
+ L"Symbols",
+ 0, 1252},
+ {0xd9fe7761, L"HighTowerText-Reg",
+ L"STIXGeneral,.Helvetica Neue Desk UI,Trebuchet MS", 2, 1252},
+ {0xda7e551e, L"STSong", L"Arial Unicode MS", 0, 936},
+ {0xdaa6842d, L"STZhongsong", L"STFangsong,Songti SC,STSong", 0, 936},
+ {0xdaaab93f, L"STFangsong", L"Songti SC,Arial Unicode MS", 0, 936},
+ {0xdaeb0713, L"STSong", L"Songti SC,Arial Unicode MS", 0, 936},
+ {0xdafedbef, L"STCaiyun", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
+ {0xdb00a3d9, L"Broadway",
+ L"Papyrus,STIXNonUnicode,Arial Black,Avenir Next Heavy,Heiti TC", 0, 1252},
+ {0xdb1f5ad4, L"STXinwei", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
+ {0xdb326e7f, L"STKaiti", L"Songti SC,Arial Unicode MS", 0, 936},
+ {0xdb69595a, L"STHupo", L"Kaiti SC,Songti SC,STHeiti", 0, 936},
+ {0xdba0082c, L"STXihei", L"Songti SC,Arial Unicode MS", 0, 936},
+ {0xdbd0ab18, L"STXingkai", L"Kaiti SC,Songti SC", 0, 936},
+ {0xdc1a7db1, L"STLiti", L"Kaiti SC,Songti SC", 0, 936},
+ {0xdc33075f, L"KristenITC-Regular",
+ L"STIXNonUnicode,Damascus,Songti SC,STSong", 8, 1252},
+ {0xdcc7009c, L"Harrington",
+ L"STIXNonUnicode,Avenir Next Condensed Heavy,Noteworthy", 0, 1252},
+ {0xdd712466, L"ArialBlack", L"Geeza Pro,Damascus,Songti SC,STSong", 0,
+ 1252},
+ {0xdde87b3e, L"Impact", L"Arial Narrow,Marion", 0, 1252},
+ {0xdf69fb32, L"SnapITC",
+ L"Arial Narrow,PT Sans Narrow,Marion,STHeiti,Arial Black", 0, 1252},
+ {0xdf8b25e8, L"CenturyGothic",
+ L"Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252},
+ {0xe0f705c0, L"KristenITC", L"Songti SC,STSong", 8, 1252},
+ {0xe1427573, L"Raavi",
+ L"Damascus,STIXNonUnicode,Marion,Papyrus,Avenir Next Condensed "
+ L"Heavy,American Typewriter",
+ 0, 1252},
+ {0xe2cea0cb, L"Magneto",
+ L"STIXNonUnicode,Damascus,Geeza Pro,Lucida Grande,Georgia,Heiti TC", 0,
+ 1252},
+ {0xe36a9e17, L"Ravie", L"STHeiti,Arial Black", 0, 1252},
+ {0xe433f8e2, L"Parchment", L"Microsoft Sans Serif,Apple Symbols", 8, 1252},
+ {0xe43dff4a, L"Wingdings", L"Microsoft Sans Serif,Apple Symbols", 4, 42},
+ {0xe4e2c405, L"MTExtra", L"Microsoft Sans Serif,Apple Symbols", 6, 42},
+ {0xe618cc35, L"InformalRoman", L"Arial Narrow", 8, 1252},
+ {0xe6c27ffc, L"Mistral", L"Apple Symbols", 8, 1252},
+ {0xe7ebf4b9, L"Courier", L"Courier New", 0, 1252},
+ {0xe8bc4a9d, L"MSReferenceSpecialty", L"Microsoft Sans Serif,Apple Symbols",
+ 0, 1252},
+ {0xe90fb013, L"TempusSansITC",
+ L"STIXNonUnicode,Microsoft Sans Serif,Avenir Light", 0, 1252},
+ {0xec637b42, L"Consolas",
+ L"AR PL UKai CN,AR PL UKai HK,AR PL UKai TW,AR PL UKai TW MBE,AR PL UMing "
+ L"CN,AR PL UMing HK,Microsoft Sans Serif,Tahoma",
+ 1, 1252},
+ {0xed3a683b, L"STXinwei", L"Kaiti SC,Songti SC,", 0, 936},
+ {0xef264cd1, L"LucidaHandwriting",
+ L"Arial Narrow,Avenir Next Condensed Demi Bold,Avenir Next "
+ L"Condensed,Avenir Next Condensed Medium,STHeiti,Arial Black",
+ 0, 1252},
+ {0xf086bca2, L"BaskervilleOldFace",
+ L"STIXNonUnicode,Avenir Next Condensed Heavy,PT Sans", 0, 1252},
+ {0xf1028030, L"Mangal",
+ L"Arial Unicode MS,Microsoft Sans Serif,Arial Narrow,Tahoma", 2, 1252},
+ {0xf1da7eb9, L"ShowcardGothic",
+ L"Papyrus,Arial Unicode MS,Georgia,American Typewriter", 0, 1252},
+ {0xf210f06a, L"ArialMT",
+ L"Arial Unicode MS,Arial Narrow,STIXNonUnicode,Damascus,Avenir Next "
+ L"Condensed Demi Bold,Avenir Next Condensed Medium,Avenir Next Condensed",
+ 0, 1252},
+ {0xf477f16a, L"Latha",
+ L"Arial Narrow,Damascus,STIXNonUnicode,American Typewriter", 0, 1252},
+ {0xf616f3dd, L"LiSu", L"STHeiti,Heiti TC,STFangsong", 1, 936},
+ {0xfa479aa6, L"MicrosoftYaHei", L"Arial Unicode MS", 0, 936},
+ {0xfcd19697, L"BookmanOldStyle",
+ L"Geeza Pro,Damascus,Andale Mono,Songti SC,Arial Unicode MS", 0, 1252},
+ {0xfe209a82, L"LucidaCalligraphy",
+ L"Kokonor,Damascus,STIXNonUnicode,STHeiti,Arial Black", 0, 1252},
+ {0xfef135f8, L"AdobeHeitiStd-Regular", L"Heiti TC,STHeiti", 0, 936},
+};
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
+static const XFA_FONTINFO g_XFAFontsMap[] = {
+ {0x01d5d33e, L"SimSun", L"Droid Sans Fallback", 0, 936},
+ {0x01e4f102, L"YouYuan", L"Droid Sans Fallback", 1, 936},
+ {0x030549dc, L"LiSu", L"Droid Sans Fallback", 1, 936},
+ {0x032edd44, L"Simhei", L"Droid Sans Fallback", 1, 936},
+ {0x03eac6fc, L"PoorRichard-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic "
+ L"Naskh,Droid Sans Ethiopic",
+ 2, 1252},
+ {0x03ed90e6, L"Nina",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x077b56b3, L"KingsoftPhoneticPlain",
+ L"Droid Sans Thai,Droid Sans Armenian,Droid Arabic Naskh,Droid Sans "
+ L"Ethiopic,Droid Sans Fallback",
+ 0, 1252},
+ {0x078ed524, L"MicrosoftSansSerif", L"Droid Sans Fallback", 0, 1252},
+ {0x089b18a9, L"Arial", L"Droid Sans Fallback", 0, 1252},
+ {0x0b2cad72, L"MonotypeCorsiva",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x0bb003e7, L"Kartika",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 2, 1252},
+ {0x0bb469df, L"VinerHandITC",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x0bc1a851, L"SegoeUI", L"Droid Sans Fallback", 0, 1252},
+ {0x0c112ebd, L"KozukaGothicPro-VIM",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x0cfcb9c1, L"AdobeThai",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 847},
+ {0x0e7de0f9, L"Playbill",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0x0eff47c3, L"STHupo", L"Droid Sans Fallback", 0, 936},
+ {0x107ad374, L"Constantia",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x12194c2d, L"KunstlerScript",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x135ef6a1, L"MinionProSmBd",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x158c4049, L"Garamond",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x160ecb24, L"STZhongsong", L"Droid Sans Fallback", 0, 936},
+ {0x161ed07e, L"MSGothic", L"Droid Sans Fallback", 1, 1252},
+ {0x171d1ed1, L"SnapITC-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x18d1188f, L"Cambria", L"Droid Sans Fallback", 2, 1252},
+ {0x18eaf350, L"ArialUnicodeMS", L"Droid Sans Fallback", 0, 936},
+ {0x1a92d115, L"MingLiU", L"Droid Sans Fallback", 1, 1252},
+ {0x1cc217c6, L"TrebuchetMS",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x1d649596, L"BasemicTimes",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x1e34ee60, L"BellMT",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x1eb36945, L"CooperBlack",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x1ef7787d, L"BatangChe", L"Droid Sans Fallback", 1, 1252},
+ {0x20b3bd3a, L"BrushScriptMT", L"Droid Arabic Naskh,Droid Sans Ethiopic", 8,
+ 1252},
+ {0x220877aa, L"Candara",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x22135007, L"FreestyleScript-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x251059c3, L"Chiller",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252},
+ {0x25bed6dd, L"MSReferenceSansSerif", L"Droid Sans Fallback", 0, 1252},
+ {0x28154c81, L"Parchment-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x29711eb9, L"STLiti", L"Droid Sans Fallback", 0, 936},
+ {0x2b1993b4, L"Basemic",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x2b316339, L"NiagaraSolid-Reg",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x2c147529, L"FootlightMTLight",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x2c198928, L"HarlowSolid",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x2c6ac6b2, L"LucidaBright",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 2, 1252},
+ {0x2c9f38e2, L"KozukaMinchoPro-VIR",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x2d5a47b0, L"STCaiyun", L"Droid Sans Fallback", 0, 936},
+ {0x2def26bf, L"BernardMT-Condensed",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x2fd8930b, L"KozukaMinchoPr6NR",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x3115525a, L"FangSong_GB2312", L"Droid Sans Fallback", 0, 1252},
+ {0x31327817, L"MyriadPro",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x32244975, L"Helvetica",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252},
+ {0x32ac995c, L"Terminal",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x338d648a, L"NiagaraEngraved-Reg",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x33bb65f2, L"Sylfaen",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x3402c30e, L"MSPMincho", L"Droid Sans Fallback", 2, 1252},
+ {0x3412bf31, L"SimSun-PUA", L"Droid Sans Fallback", 0, 936},
+ {0x36eb39b9, L"BerlinSansFB",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x36f42055, L"UniversATT", L"Microsoft Sans Serif", 0, 1252},
+ {0x3864c4f6, L"HighTowerText",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x3a257d03, L"FangSong_GB2312", L"Droid Sans Fallback", 0, 1252},
+ {0x3cdae668, L"FreestyleScript",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x3d55aed7, L"Jokerman",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x3d5b4385, L"PMingLiU", L"Droid Sans Fallback", 2, 1252},
+ {0x3d9b7669, L"EstrangeloEdessa",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x3e532d74, L"FranklinGothicMedium",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x3e6aa32d, L"NSimSun", L"Droid Sans Fallback", 1, 936},
+ {0x3f6c36a8, L"Gautami",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono,Droid Sans Fallback",
+ 0, 1252},
+ {0x3ff32662, L"Chiller-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x409de312, L"ModernNo.20",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x41443c5e, L"Georgia",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x4160ade5, L"BellGothicStdBlack",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x421976c4, L"Modern-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x422a7252, L"Stencil",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x42c8554f, L"Fixedsys",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x435cb41d, L"Roman",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x47882383, L"CourierNew", L"Droid Sans Fallback", 1, 1252},
+ {0x480a2338, L"BerlinSansFBDemi",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x480bf7a4, L"CourierStd", L"Droid Sans Fallback", 0, 1252},
+ {0x481ad6ed, L"VladimirScript",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0x4911577a, L"YouYuan", L"Droid Sans Fallback", 1, 936},
+ {0x4a788d72, L"STXingkai", L"Droid Sans Fallback", 0, 936},
+ {0x4bf88566, L"SegoeCondensed",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x4ccf51a4, L"BerlinSansFB-Reg",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x4ea967ce, L"GulimChe", L"Droid Sans Fallback", 1, 1252},
+ {0x4f68bd79, L"LetterGothicStd",
+ L"Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic,Droid Sans "
+ L"Mono,Droid Serif,Droid Sans Fallback",
+ 0, 1252},
+ {0x51a0d0e6, L"KozukaGothicPr6NM",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x531b3dea, L"BasemicSymbol",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x5333fd39, L"CalifornianFB-Reg",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x53561a54, L"FZYTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
+ {0x55e0dde6, L"LucidaSansTypewriter",
+ L"Droid Sans Mono,Droid Arabic Naskh,Droid Sans Ethiopic", 0, 1252},
+ {0x574d4d3d, L"AdobeArabic",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x5792e759, L"STKaiti", L"Droid Sans Fallback", 0, 936},
+ {0x5921978e, L"LucidaSansUnicode", L"Droid Sans Fallback", 0, 1252},
+ {0x594e2da4, L"Vrinda",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0x59baa9a2, L"KaiTi_GB2312", L"Droid Sans Fallback", 0, 1252},
+ {0x5cfedf4f, L"BaskOldFace",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x5f97921c, L"AdobeMyungjoStdM", L"Droid Sans Fallback", 0, 936},
+ {0x5fefbfad, L"Batang", L"Droid Sans Fallback", 2, 1252},
+ {0x605342b9, L"DotumChe", L"Droid Sans Fallback", 1, 1252},
+ {0x608c5f9a, L"KaiTi_GB2312", L"Droid Sans Fallback", 0, 936},
+ {0x61efd0d1, L"MaturaMTScriptCapitals",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0x626608a9, L"MVBoli",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0x630501a3, L"SmallFonts",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x65d0e2a9, L"FZYTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
+ {0x669f29e1, L"FZSTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
+ {0x673a9e5f, L"Tunga",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono,Droid Sans Fallback",
+ 0, 1252},
+ {0x691aa4ce, L"NiagaraSolid",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x696259b7, L"Corbel",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x696ee9be, L"STXihei", L"Droid Sans Fallback", 0, 936},
+ {0x6c59cf69, L"Dotum", L"Droid Sans Fallback", 0, 1252},
+ {0x707fa561, L"Gungsuh", L"Droid Sans Fallback", 2, 1252},
+ {0x71416bb2, L"ZWAdobeF",
+ L"Droid Arabic Naskh,Droid Sans Armenian,Droid Sans Ethiopic,Droid Sans "
+ L"Georgian,Droid Sans Hebrew,Droid Sans Thai",
+ 0, 1252},
+ {0x71b41801, L"Verdana",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x73f25e4c, L"PalatinoLinotype", L"Droid Sans Fallback", 0, 1252},
+ {0x73f4d19f, L"NiagaraEngraved",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x74001694, L"MyriadProBlack", L"Book Antiqua,Constantia,Dotum,Georgia", 0,
+ 1252},
+ {0x74b14d8f, L"Haettenschweiler",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x74cb44ee, L"NSimSun", L"Droid Sans Fallback", 1, 936},
+ {0x76b4d7ff, L"Shruti",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0x788b3533, L"Webdings",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+ {0x797dde99, L"MSSerif",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x7a0f9e9e, L"MSMincho", L"Droid Sans Fallback", 1, 1252},
+ {0x7b439caf, L"OldEnglishTextMT",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x8213a433, L"LucidaSans-Typewriter",
+ L"Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 0, 1252},
+ {0x82fec929, L"AdobeSongStdL", L"Droid Sans Fallback", 0, 936},
+ {0x83581825, L"Modern",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x835a2823, L"Algerian",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x83dab9f5, L"Script",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x847b56da, L"Tahoma", L"Droid Sans Fallback", 0, 1252},
+ {0x8a783cb2, L"SimSun-PUA", L"Droid Sans Fallback", 0, 1252},
+ {0x8b5cac0e, L"Onyx",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x8c6a499e, L"Gulim", L"Droid Sans Fallback", 0, 1252},
+ {0x8e0af790, L"JuiceITC",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x8e8d43b2, L"Centaur",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x8ee4dcca, L"BookshelfSymbol7",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x90794800, L"BellGothicStdLight",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x909b516a, L"Century",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x92ae370d, L"MSOutlook",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
+ {0x93c9fbf1, L"LucidaFax",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 2, 1252},
+ {0x9565085e, L"BookAntiqua",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0x9856d95d, L"AdobeMingStdL", L"Droid Sans Fallback", 0, 949},
+ {0x9bbadd6b, L"ColonnaMT",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0x9cbd16a4, L"ShowcardGothic-Reg",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252},
+ {0x9d73008e, L"MSSansSerif",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xa0607db1, L"GungsuhChe", L"Droid Sans Fallback", 1, 1252},
+ {0xa0bcf6a1, L"LatinWide",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0xa1429b36, L"Symbol",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+ {0xa1fa5abc, L"Wingdings2",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+ {0xa1fa5abd, L"Wingdings3",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+ {0xa427bad4, L"InformalRoman-Regular",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic", 8, 1252},
+ {0xa8b92ece, L"FZSTK--GBK1-0", L"Droid Sans Fallback", 0, 936},
+ {0xa8d83ece, L"CalifornianFB",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0xaa3e082c, L"Kingsoft-Phonetic",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xaa6bcabe, L"HarlowSolidItalic",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xade5337c, L"MSUIGothic",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xb08dd941, L"WideLatin",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 2, 1252},
+ {0xb207f05d, L"PoorRichard",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0xb3bc492f, L"JuiceITC-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xb5545399, L"Marlett",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
+ {0xb5dd1ebb, L"BritannicBold", L"Droid Arabic Naskh,Droid Sans Ethiopic", 0,
+ 1252},
+ {0xb699c1c5, L"LucidaCalligraphy-Italic",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xb725d629, L"TimesNewRoman", L"Droid Sans Fallback", 2, 1252},
+ {0xb7eaebeb, L"AdobeHeitiStdR", L"Droid Sans Fallback", 0, 936},
+ {0xbd29c486, L"BerlinSansFBDemi-Bold",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xbe8a8db4, L"BookshelfSymbolSeven",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xc16c0118, L"AdobeHebrew",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback,Droid Arabic "
+ L"Naskh,Droid Sans Ethiopic",
+ 0, 1252},
+ {0xc318b0af, L"MyriadProLight",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xc65e5659, L"CambriaMath", L"Droid Sans Fallback", 2, 1252},
+ {0xc75c8f05, L"LucidaConsole",
+ L"Droid Sans Mono,Droid Serif,Roboto,Droid Sans Fallback", 1, 1252},
+ {0xca7c35d6, L"Calibri", L"Droid Sans Fallback", 0, 1252},
+ {0xcb053f53, L"MicrosoftYaHei", L"Droid Sans Fallback", 0, 936},
+ {0xcb7190f9, L"Magneto-Bold",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xcca00cc5, L"System",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xccad6f76, L"Jokerman-Regular",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xccc5818c, L"EuroSign",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xcf3d7234, L"LucidaHandwriting-Italic",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xcf7b8fdb, L"MinionPro",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xcfe5755f, L"Simhei", L"Droid Sans Fallback", 1, 936},
+ {0xd011f4ee, L"MSPGothic", L"Droid Sans Fallback", 0, 1252},
+ {0xd060e7ef, L"Vivaldi",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0xd07edec1, L"FranklinGothic-Medium",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xd107243f, L"SimSun", L"Droid Sans Fallback", 0, 936},
+ {0xd1881562, L"ArialNarrow",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xd22b7dce, L"BodoniMTPosterCompressed",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xd22bfa60, L"ComicSansMS", L"Droid Serif,Roboto,Droid Sans Fallback", 8,
+ 1252},
+ {0xd3bd0e35, L"Bauhaus93",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xd429ee7a, L"STFangsong", L"Droid Sans Fallback", 0, 936},
+ {0xd6679c12, L"BernardMTCondensed",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xd8e8a027, L"LucidaSans",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 0, 1252},
+ {0xd9fe7761, L"HighTowerText-Reg",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 2, 1252},
+ {0xda7e551e, L"STSong", L"Droid Sans Fallback", 0, 936},
+ {0xdaa6842d, L"STZhongsong", L"Droid Sans Fallback", 0, 936},
+ {0xdaaab93f, L"STFangsong", L"Droid Sans Fallback", 0, 936},
+ {0xdaeb0713, L"STSong",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 936},
+ {0xdafedbef, L"STCaiyun", L"Droid Sans Fallback", 0, 936},
+ {0xdb00a3d9, L"Broadway",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xdb1f5ad4, L"STXinwei", L"Droid Sans Fallback", 0, 936},
+ {0xdb326e7f, L"STKaiti", L"Droid Sans Fallback", 0, 936},
+ {0xdb69595a, L"STHupo", L"Droid Sans Fallback", 0, 936},
+ {0xdba0082c, L"STXihei", L"Droid Sans Fallback", 0, 936},
+ {0xdbd0ab18, L"STXingkai", L"Droid Sans Fallback", 0, 936},
+ {0xdc1a7db1, L"STLiti", L"Droid Sans Fallback", 0, 936},
+ {0xdc33075f, L"KristenITC-Regular",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252},
+ {0xdcc7009c, L"Harrington",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xdd712466, L"ArialBlack",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xdde87b3e, L"Impact",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xdf69fb32, L"SnapITC",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xdf8b25e8, L"CenturyGothic",
+ L"Droid Serif,Roboto,Droid Serif,Droid Sans Mono", 0, 1252},
+ {0xe0f705c0, L"KristenITC",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto", 8, 1252},
+ {0xe1427573, L"Raavi",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xe2cea0cb, L"Magneto",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xe36a9e17, L"Ravie",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xe433f8e2, L"Parchment",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0xe43dff4a, L"Wingdings",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 4, 42},
+ {0xe4e2c405, L"MTExtra",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 6, 42},
+ {0xe618cc35, L"InformalRoman",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 8, 1252},
+ {0xe6c27ffc, L"Mistral",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 8, 1252},
+ {0xe7ebf4b9, L"Courier", L"Droid Sans Fallback", 0, 1252},
+ {0xe8bc4a9d, L"MSReferenceSpecialty",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xe90fb013, L"TempusSansITC",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xec637b42, L"Consolas", L"Droid Sans Fallback", 1, 1252},
+ {0xed3a683b, L"STXinwei", L"Droid Sans Fallback", 0, 936},
+ {0xef264cd1, L"LucidaHandwriting",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xf086bca2, L"BaskervilleOldFace",
+ L"Roboto,Droid Serif,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xf1028030, L"Mangal",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 2, 1252},
+ {0xf1da7eb9, L"ShowcardGothic",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallbac", 0, 1252},
+ {0xf210f06a, L"ArialMT",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif", 0, 1252},
+ {0xf477f16a, L"Latha",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Roboto,Droid Serif,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xf616f3dd, L"LiSu", L"Droid Sans Fallback", 1, 936},
+ {0xfa479aa6, L"MicrosoftYaHei", L"Droid Sans Fallback", 0, 936},
+ {0xfcd19697, L"BookmanOldStyle",
+ L"Droid Serif,Roboto,Droid Sans Mono,Droid Sans Fallback", 0, 1252},
+ {0xfe209a82, L"LucidaCalligraphy",
+ L"Droid Arabic Naskh,Droid Sans Ethiopic,Droid Serif,Roboto,Droid Sans "
+ L"Mono",
+ 0, 1252},
+ {0xfef135f8, L"AdobeHeitiStd-Regular", L"Droid Sans Fallback", 0, 936},
+};
+#endif
+void XFA_LocalFontNameToEnglishName(const CFX_WideStringC& wsLocalName,
+ CFX_WideString& wsEnglishName) {
+ wsEnglishName = wsLocalName;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
+ FX_DWORD dwLocalNameHash = FX_HashCode_String_GetW(
+ wsLocalName.GetPtr(), wsLocalName.GetLength(), TRUE);
+ int32_t iStart = 0;
+ int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1;
+ int32_t iMid = 0;
+ do {
+ iMid = (iStart + iEnd) / 2;
+ FX_DWORD dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash;
+ if (dwFontNameHash == dwLocalNameHash) {
+ wsEnglishName = g_XFAFontsMap[iMid].pPsName;
+ break;
+ } else if (dwFontNameHash < dwLocalNameHash) {
+ iStart = iMid + 1;
+ } else {
+ iEnd = iMid - 1;
+ }
+ } while (iEnd >= iStart);
+#endif
+}
+const XFA_FONTINFO* XFA_GetFontINFOByFontName(
+ const CFX_WideStringC& wsFontName) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
+ CFX_WideString wsFontNameTemp = wsFontName;
+ wsFontNameTemp.Remove(L' ');
+ FX_DWORD dwCurFontNameHash =
+ FX_HashCode_String_GetW(wsFontNameTemp, wsFontNameTemp.GetLength(), TRUE);
+ int32_t iStart = 0;
+ int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1;
+ int32_t iMid = 0;
+ const XFA_FONTINFO* pFontInfo = NULL;
+ do {
+ iMid = (iStart + iEnd) / 2;
+ FX_DWORD dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash;
+ if (dwFontNameHash == dwCurFontNameHash) {
+ pFontInfo = &g_XFAFontsMap[iMid];
+ break;
+ } else if (dwFontNameHash < dwCurFontNameHash) {
+ iStart = iMid + 1;
+ } else {
+ iEnd = iMid - 1;
+ }
+ } while (iEnd >= iStart);
+ return pFontInfo;
+#else
+ return NULL;
+#endif
+}
+// static
+IXFA_FontMgr* IXFA_FontMgr::CreateDefault() {
+ return new CXFA_DefFontMgr;
+}
+// virtual
+IXFA_FontMgr::~IXFA_FontMgr() {}
+CXFA_DefFontMgr::~CXFA_DefFontMgr() {
+ int32_t iCounts = m_CacheFonts.GetSize();
+ for (int32_t i = 0; i < iCounts; i++) {
+ ((IFX_Font*)m_CacheFonts[i])->Release();
+ }
+ m_CacheFonts.RemoveAll();
+}
+IFX_Font* CXFA_DefFontMgr::GetFont(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ FX_WORD wCodePage) {
+ CFX_WideString wsFontName = wsFontFamily;
+ IFX_FontMgr* pFDEFontMgr = ((CXFA_FFDoc*)hDoc)->GetApp()->GetFDEFontMgr();
+ const XFA_FONTINFO* pCurFont = NULL;
+ FX_BOOL bGetFontInfo = TRUE;
+ IFX_Font* pFont = pFDEFontMgr->LoadFont((const FX_WCHAR*)wsFontName,
+ dwFontStyles, wCodePage);
+ if (!pFont && hDoc) {
+ if (bGetFontInfo) {
+ pCurFont = XFA_GetFontINFOByFontName(wsFontName);
+ }
+ if (pCurFont != NULL && pCurFont->pReplaceFont != NULL) {
+ FX_DWORD dwStyle = 0;
+ if (dwFontStyles & FX_FONTSTYLE_Bold) {
+ dwStyle |= FX_FONTSTYLE_Bold;
+ }
+ if (dwFontStyles & FX_FONTSTYLE_Italic) {
+ dwStyle |= FX_FONTSTYLE_Italic;
+ }
+ const FX_WCHAR* pReplace = pCurFont->pReplaceFont;
+ int32_t iLength = FXSYS_wcslen(pReplace);
+ while (iLength > 0) {
+ const FX_WCHAR* pNameText = pReplace;
+ while (*pNameText != L',' && iLength > 0) {
+ pNameText++;
+ iLength--;
+ }
+ CFX_WideString wsReplace =
+ CFX_WideString(pReplace, pNameText - pReplace);
+ pFont = pFDEFontMgr->LoadFont(wsReplace, dwStyle, wCodePage);
+ if (pFont != NULL) {
+ break;
+ }
+ iLength--;
+ pNameText++;
+ pReplace = pNameText;
+ }
+ }
+ }
+ if (pFont) {
+ m_CacheFonts.Add(pFont);
+ }
+ return pFont;
+}
+IFX_Font* CXFA_DefFontMgr::GetDefaultFont(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ FX_WORD wCodePage) {
+ IFX_FontMgr* pFDEFontMgr = ((CXFA_FFDoc*)hDoc)->GetApp()->GetFDEFontMgr();
+ IFX_Font* pFont =
+ pFDEFontMgr->LoadFont(L"Arial Narrow", dwFontStyles, wCodePage);
+ if (!pFont)
+ pFont =
+ pFDEFontMgr->LoadFont((const FX_WCHAR*)NULL, dwFontStyles, wCodePage);
+ FXSYS_assert(pFont != NULL);
+ if (pFont) {
+ m_CacheFonts.Add(pFont);
+ }
+ return pFont;
+}
+struct XFA_PDFFONTNAME {
+ const FX_CHAR* lpPsName;
+ const FX_CHAR* lpNormal;
+ const FX_CHAR* lpBold;
+ const FX_CHAR* lpItalic;
+ const FX_CHAR* lpBoldItalic;
+};
+const XFA_PDFFONTNAME g_XFAPDFFontName[] = {
+ {"Adobe PI Std", "AdobePIStd", "AdobePIStd", "AdobePIStd", "AdobePIStd"},
+ {"Myriad Pro Light", "MyriadPro-Light", "MyriadPro-Semibold",
+ "MyriadPro-LightIt", "MyriadPro-SemiboldIt"},
+};
+CXFA_PDFFontMgr::CXFA_PDFFontMgr(CXFA_FFDoc* pDoc) {
+ m_pDoc = pDoc;
+}
+CXFA_PDFFontMgr::~CXFA_PDFFontMgr() {
+ m_FDE2PDFFont.RemoveAll();
+ for (const auto& pair : m_FontMap) {
+ if (pair.second)
+ pair.second->Release();
+ }
+}
+IFX_Font* CXFA_PDFFontMgr::FindFont(CFX_ByteString strPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic,
+ CPDF_Font** pDstPDFFont,
+ FX_BOOL bStrictMatch) {
+ CPDF_Document* pDoc = m_pDoc->GetPDFDoc();
+ if (pDoc == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pFontSetDict =
+ pDoc->GetRoot()->GetDict("AcroForm")->GetDict("DR");
+ if (!pFontSetDict) {
+ return NULL;
+ }
+ pFontSetDict = (CPDF_Dictionary*)pFontSetDict->GetDict("Font");
+ if (!pFontSetDict) {
+ return NULL;
+ }
+ strPsName.Remove(' ');
+ IFX_FontMgr* pFDEFontMgr = m_pDoc->GetApp()->GetFDEFontMgr();
+ for (const auto& it : *pFontSetDict) {
+ const CFX_ByteString& key = it.first;
+ CPDF_Object* pObj = it.second;
+ if (!PsNameMatchDRFontName(strPsName, bBold, bItalic, key, bStrictMatch)) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (!pDirect || !pDirect->IsDictionary()) {
+ return NULL;
+ }
+ CPDF_Dictionary* pFontDict = (CPDF_Dictionary*)pDirect;
+ if (pFontDict->GetString("Type") != "Font") {
+ return NULL;
+ }
+ CPDF_Font* pPDFFont = pDoc->LoadFont(pFontDict);
+ if (!pPDFFont) {
+ return NULL;
+ }
+ if (!pPDFFont->IsEmbedded()) {
+ *pDstPDFFont = pPDFFont;
+ return NULL;
+ }
+ return IFX_Font::LoadFont(&pPDFFont->m_Font, pFDEFontMgr);
+ }
+ return NULL;
+}
+IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ CPDF_Font** pPDFFont,
+ FX_BOOL bStrictMatch) {
+ FX_DWORD dwHashCode =
+ FX_HashCode_String_GetW(wsFontFamily.GetPtr(), wsFontFamily.GetLength());
+ CFX_ByteString strKey;
+ strKey.Format("%u%u", dwHashCode, dwFontStyles);
+ auto it = m_FontMap.find(strKey);
+ if (it != m_FontMap.end())
+ return it->second;
+ CFX_ByteString bsPsName = CFX_ByteString::FromUnicode(wsFontFamily);
+ FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold;
+ FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic;
+ CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic);
+ IFX_Font* pFont =
+ FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch);
+ if (pFont)
+ m_FontMap[strKey] = pFont;
+ return pFont;
+}
+CFX_ByteString CXFA_PDFFontMgr::PsNameToFontName(
+ const CFX_ByteString& strPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic) {
+ int32_t nCount = sizeof(g_XFAPDFFontName) / sizeof(XFA_PDFFONTNAME);
+ for (int32_t i = 0; i < nCount; i++) {
+ if (strPsName == g_XFAPDFFontName[i].lpPsName) {
+ int32_t index = 1 + ((bItalic << 1) | bBold);
+ return *(&g_XFAPDFFontName[i].lpPsName + index);
+ }
+ }
+ return strPsName;
+}
+FX_BOOL CXFA_PDFFontMgr::PsNameMatchDRFontName(
+ const CFX_ByteStringC& bsPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic,
+ const CFX_ByteString& bsDRFontName,
+ FX_BOOL bStrictMatch) {
+ CFX_ByteString bsDRName = bsDRFontName;
+ bsDRName.Remove('-');
+ int32_t iPsLen = bsPsName.GetLength();
+ int32_t nIndex = bsDRName.Find(bsPsName);
+ if (nIndex != -1 && !bStrictMatch) {
+ return TRUE;
+ }
+ if (nIndex != 0) {
+ return FALSE;
+ }
+ int32_t iDifferLength = bsDRName.GetLength() - iPsLen;
+ if (iDifferLength > 1 || (bBold || bItalic)) {
+ int32_t iBoldIndex = bsDRName.Find("Bold");
+ FX_BOOL bBoldFont = iBoldIndex > 0;
+ if (bBold ^ bBoldFont) {
+ return FALSE;
+ }
+ if (bBoldFont) {
+ iDifferLength =
+ std::min(iDifferLength - 4, bsDRName.GetLength() - iBoldIndex - 4);
+ }
+ FX_BOOL bItalicFont = TRUE;
+ if (bsDRName.Find("Italic") > 0) {
+ iDifferLength -= 6;
+ } else if (bsDRName.Find("It") > 0) {
+ iDifferLength -= 2;
+ } else if (bsDRName.Find("Oblique") > 0) {
+ iDifferLength -= 7;
+ } else {
+ bItalicFont = FALSE;
+ }
+ if (bItalic ^ bItalicFont) {
+ return FALSE;
+ }
+ if (iDifferLength > 1) {
+ CFX_ByteString bsDRTailer = bsDRName.Right(iDifferLength);
+ if (bsDRTailer.Equal("MT") || bsDRTailer.Equal("PSMT") ||
+ bsDRTailer.Equal("Regular") || bsDRTailer.Equal("Reg")) {
+ return TRUE;
+ }
+ if (bBoldFont || bItalicFont) {
+ return FALSE;
+ }
+ FX_BOOL bMatch = FALSE;
+ switch (bsPsName.GetAt(iPsLen - 1)) {
+ case 'L': {
+ if (bsDRName.Right(5).Equal("Light")) {
+ bMatch = TRUE;
+ }
+ } break;
+ case 'R': {
+ if (bsDRName.Right(7).Equal("Regular") ||
+ bsDRName.Right(3).Equal("Reg")) {
+ bMatch = TRUE;
+ }
+ } break;
+ case 'M': {
+ if (bsDRName.Right(5).Equal("Medium")) {
+ bMatch = TRUE;
+ }
+ } break;
+ default:
+ break;
+ }
+ return bMatch;
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CXFA_PDFFontMgr::GetCharWidth(IFX_Font* pFont,
+ FX_WCHAR wUnicode,
+ int32_t& iWidth,
+ FX_BOOL bCharCode) {
+ if (wUnicode != 0x20 || bCharCode) {
+ return FALSE;
+ }
+ CPDF_Font* pPDFFont = (CPDF_Font*)m_FDE2PDFFont.GetValueAt(pFont);
+ if (!pPDFFont) {
+ return FALSE;
+ }
+ wUnicode = (FX_WCHAR)pPDFFont->CharCodeFromUnicode(wUnicode);
+ iWidth = pPDFFont->GetCharWidthF(wUnicode);
+ return TRUE;
+}
+CXFA_FontMgr::CXFA_FontMgr() : m_pDefFontMgr(NULL) {}
+CXFA_FontMgr::~CXFA_FontMgr() {
+ DelAllMgrMap();
+}
+IFX_Font* CXFA_FontMgr::GetFont(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ FX_WORD wCodePage) {
+ FX_DWORD dwHash = FX_HashCode_String_GetW(wsFontFamily.GetPtr(),
+ wsFontFamily.GetLength(), FALSE);
+ CFX_ByteString bsKey;
+ bsKey.Format("%u%u%u", dwHash, dwFontStyles, wCodePage);
+ auto it = m_FontMap.find(bsKey);
+ if (it != m_FontMap.end())
+ return it->second;
+ CFX_WideString wsEnglishName;
+ XFA_LocalFontNameToEnglishName(wsFontFamily, wsEnglishName);
+ CXFA_PDFFontMgr* pMgr = (CXFA_PDFFontMgr*)m_PDFFontMgrArray.GetValueAt(hDoc);
+ CPDF_Font* pPDFFont = NULL;
+ IFX_Font* pFont = NULL;
+ if (pMgr) {
+ pFont = pMgr->GetFont(wsEnglishName, dwFontStyles, &pPDFFont);
+ if (pFont)
+ return pFont;
+ }
+ if (!pFont && m_pDefFontMgr) {
+ pFont = m_pDefFontMgr->GetFont(hDoc, wsFontFamily, dwFontStyles, wCodePage);
+ }
+ if (!pFont && pMgr) {
+ pPDFFont = NULL;
+ pFont = pMgr->GetFont(wsEnglishName, dwFontStyles, &pPDFFont, FALSE);
+ if (pFont)
+ return pFont;
+ }
+ if (!pFont && m_pDefFontMgr) {
+ pFont = m_pDefFontMgr->GetDefaultFont(hDoc, wsFontFamily, dwFontStyles,
+ wCodePage);
+ }
+ if (pFont) {
+ if (pPDFFont) {
+ pMgr->m_FDE2PDFFont.SetAt(pFont, pPDFFont);
+ pFont->SetFontProvider(pMgr);
+ }
+ m_FontMap[bsKey] = pFont;
+ }
+ return pFont;
+}
+void CXFA_FontMgr::LoadDocFonts(IXFA_Doc* hDoc) {
+ if (!m_PDFFontMgrArray.GetValueAt(hDoc)) {
+ m_PDFFontMgrArray.SetAt(hDoc, new CXFA_PDFFontMgr((CXFA_FFDoc*)hDoc));
+ }
+}
+void CXFA_FontMgr::ReleaseDocFonts(IXFA_Doc* hDoc) {
+ CXFA_PDFFontMgr* pMgr = NULL;
+ if (m_PDFFontMgrArray.Lookup(hDoc, (void*&)pMgr)) {
+ if (pMgr != NULL) {
+ delete pMgr;
+ }
+ m_PDFFontMgrArray.RemoveKey(hDoc);
+ }
+}
+void CXFA_FontMgr::DelAllMgrMap() {
+ FX_POSITION ps = m_PDFFontMgrArray.GetStartPosition();
+ while (ps) {
+ IXFA_Doc* hDoc = NULL;
+ CXFA_PDFFontMgr* pMgr = NULL;
+ m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr);
+ if (pMgr != NULL) {
+ delete pMgr;
+ }
+ }
+ m_PDFFontMgrArray.RemoveAll();
+ m_FontMap.clear();
+}
+void CXFA_FontMgr::SetDefFontMgr(IXFA_FontMgr* pFontMgr) {
+ m_pDefFontMgr = pFontMgr;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_fontmgr.h b/xfa/src/fxfa/src/app/xfa_fontmgr.h
index b203dae295..84f59bc214 100644
--- a/xfa/src/fxfa/src/app/xfa_fontmgr.h
+++ b/xfa/src/fxfa/src/app/xfa_fontmgr.h
@@ -1,93 +1,93 @@
-// 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 XFA_FONTMGR_H_
-#define XFA_FONTMGR_H_
-
-#include <map>
-
-struct XFA_FONTINFO {
- FX_DWORD dwFontNameHash;
- const FX_WCHAR* pPsName;
- const FX_WCHAR* pReplaceFont;
- FX_WORD dwStyles;
- FX_WORD wCodePage;
-};
-
-class CXFA_DefFontMgr : public IXFA_FontMgr {
- public:
- CXFA_DefFontMgr() {}
- ~CXFA_DefFontMgr() override;
-
- // IXFA_FontMgr:
- IFX_Font* GetFont(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- FX_WORD wCodePage = 0xFFFF) override;
- IFX_Font* GetDefaultFont(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- FX_WORD wCodePage = 0xFFFF) override;
-
- protected:
- CFX_PtrArray m_CacheFonts;
-};
-
-class CXFA_PDFFontMgr : public IFX_FontProvider {
- public:
- CXFA_PDFFontMgr(CXFA_FFDoc* pDoc);
- ~CXFA_PDFFontMgr();
- IFX_Font* GetFont(const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- CPDF_Font** pPDFFont,
- FX_BOOL bStrictMatch = TRUE);
- FX_BOOL GetCharWidth(IFX_Font* pFont,
- FX_WCHAR wUnicode,
- int32_t& iWidth,
- FX_BOOL bCharCode);
- CFX_MapPtrToPtr m_FDE2PDFFont;
-
- protected:
- IFX_Font* FindFont(CFX_ByteString strFamilyName,
- FX_BOOL bBold,
- FX_BOOL bItalic,
- CPDF_Font** pPDFFont,
- FX_BOOL bStrictMatch = TRUE);
- CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic);
- FX_BOOL PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName,
- FX_BOOL bBold,
- FX_BOOL bItalic,
- const CFX_ByteString& bsDRFontName,
- FX_BOOL bStrictMatch = TRUE);
-
- CXFA_FFDoc* m_pDoc;
- std::map<CFX_ByteString, IFX_Font*> m_FontMap;
-};
-
-class CXFA_FontMgr {
- public:
- CXFA_FontMgr();
- ~CXFA_FontMgr();
- IFX_Font* GetFont(IXFA_Doc* hDoc,
- const CFX_WideStringC& wsFontFamily,
- FX_DWORD dwFontStyles,
- FX_WORD wCodePage = 0xFFFF);
- void LoadDocFonts(IXFA_Doc* hDoc);
- void ReleaseDocFonts(IXFA_Doc* hDoc);
-
- void SetDefFontMgr(IXFA_FontMgr* pFontMgr);
-
- protected:
- void DelAllMgrMap();
-
- CFX_MapPtrToPtr m_PDFFontMgrArray;
- IXFA_FontMgr* m_pDefFontMgr;
- std::map<CFX_ByteString, IFX_Font*> m_FontMap;
-};
-
-#endif // XFA_FONTMGR_H_
+// 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 XFA_FONTMGR_H_
+#define XFA_FONTMGR_H_
+
+#include <map>
+
+struct XFA_FONTINFO {
+ FX_DWORD dwFontNameHash;
+ const FX_WCHAR* pPsName;
+ const FX_WCHAR* pReplaceFont;
+ FX_WORD dwStyles;
+ FX_WORD wCodePage;
+};
+
+class CXFA_DefFontMgr : public IXFA_FontMgr {
+ public:
+ CXFA_DefFontMgr() {}
+ ~CXFA_DefFontMgr() override;
+
+ // IXFA_FontMgr:
+ IFX_Font* GetFont(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ FX_WORD wCodePage = 0xFFFF) override;
+ IFX_Font* GetDefaultFont(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ FX_WORD wCodePage = 0xFFFF) override;
+
+ protected:
+ CFX_PtrArray m_CacheFonts;
+};
+
+class CXFA_PDFFontMgr : public IFX_FontProvider {
+ public:
+ CXFA_PDFFontMgr(CXFA_FFDoc* pDoc);
+ ~CXFA_PDFFontMgr();
+ IFX_Font* GetFont(const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ CPDF_Font** pPDFFont,
+ FX_BOOL bStrictMatch = TRUE);
+ FX_BOOL GetCharWidth(IFX_Font* pFont,
+ FX_WCHAR wUnicode,
+ int32_t& iWidth,
+ FX_BOOL bCharCode);
+ CFX_MapPtrToPtr m_FDE2PDFFont;
+
+ protected:
+ IFX_Font* FindFont(CFX_ByteString strFamilyName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic,
+ CPDF_Font** pPDFFont,
+ FX_BOOL bStrictMatch = TRUE);
+ CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic);
+ FX_BOOL PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName,
+ FX_BOOL bBold,
+ FX_BOOL bItalic,
+ const CFX_ByteString& bsDRFontName,
+ FX_BOOL bStrictMatch = TRUE);
+
+ CXFA_FFDoc* m_pDoc;
+ std::map<CFX_ByteString, IFX_Font*> m_FontMap;
+};
+
+class CXFA_FontMgr {
+ public:
+ CXFA_FontMgr();
+ ~CXFA_FontMgr();
+ IFX_Font* GetFont(IXFA_Doc* hDoc,
+ const CFX_WideStringC& wsFontFamily,
+ FX_DWORD dwFontStyles,
+ FX_WORD wCodePage = 0xFFFF);
+ void LoadDocFonts(IXFA_Doc* hDoc);
+ void ReleaseDocFonts(IXFA_Doc* hDoc);
+
+ void SetDefFontMgr(IXFA_FontMgr* pFontMgr);
+
+ protected:
+ void DelAllMgrMap();
+
+ CFX_MapPtrToPtr m_PDFFontMgrArray;
+ IXFA_FontMgr* m_pDefFontMgr;
+ std::map<CFX_ByteString, IFX_Font*> m_FontMap;
+};
+
+#endif // XFA_FONTMGR_H_
diff --git a/xfa/src/fxfa/src/app/xfa_fwladapter.cpp b/xfa/src/fxfa/src/app/xfa_fwladapter.cpp
index 4382d0bbf3..e5a3e7a2bc 100644
--- a/xfa/src/fxfa/src/app/xfa_fwladapter.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fwladapter.cpp
@@ -1,78 +1,78 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwladapter.h"
-#include "xfa_ffwidget.h"
-#include "xfa_fffield.h"
-#include "xfa_ffdoc.h"
-IFWL_AdapterNative* FWL_CreateFuelAdapterNative() {
- return NULL;
-}
-void FWL_ReleaseFuelAdapterNative(IFWL_AdapterNative* native) {}
-void FWL_PostMessageToMainRoop(CFWL_Message* pMessage) {}
-FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget,
- FX_BOOL bVisible,
- const CFX_RectF* pRtAnchor) {
- CXFA_FFWidget* pXFAWidget = (CXFA_FFWidget*)pWidget->GetPrivateData(pWidget);
- if (!pXFAWidget) {
- return FALSE;
- }
- IXFA_DocProvider* pDocProvider = pXFAWidget->GetDoc()->GetDocProvider();
- if (!pDocProvider) {
- return FALSE;
- }
- if (bVisible) {
- CFX_Matrix mt;
- pXFAWidget->GetRotateMatrix(mt);
- CFX_RectF rt(*pRtAnchor);
- mt.TransformRect(rt);
- pDocProvider->DisplayCaret(pXFAWidget, bVisible, &rt);
- return TRUE;
- }
- pDocProvider->DisplayCaret(pXFAWidget, bVisible, pRtAnchor);
- return TRUE;
-}
-FWL_ERR CXFA_FWLAdapterWidgetMgr::RepaintWidget(IFWL_Widget* pWidget,
- const CFX_RectF* pRect) {
- if (!pWidget)
- return FWL_ERR_Indefinite;
- CXFA_FFField* pField = (CXFA_FFField*)pWidget->GetPrivateData(pWidget);
- if (!pField)
- return FWL_ERR_Indefinite;
-#ifdef _XFA_EMB
- CFX_RectF rtInvalidate;
- pWidget->GetWidgetRect(rtInvalidate);
- if (pRect) {
- rtInvalidate.left += pRect->left;
- rtInvalidate.top += pRect->top;
- rtInvalidate.width = pRect->width;
- rtInvalidate.height = pRect->height;
- }
- CFX_Matrix mt;
- pField->GetRotateMatrix(mt);
- mt.TransformRect(rtInvalidate);
- pField->AddInvalidateRect(&rtInvalidate);
-#else
- pField->AddInvalidateRect(NULL);
-#endif
- return FWL_ERR_Succeeded;
-}
-FX_BOOL CXFA_FWLAdapterWidgetMgr::GetPopupPos(IFWL_Widget* pWidget,
- FX_FLOAT fMinHeight,
- FX_FLOAT fMaxHeight,
- const CFX_RectF& rtAnchor,
- CFX_RectF& rtPopup) {
- CXFA_FFWidget* pFFWidget = (CXFA_FFWidget*)(pWidget->GetPrivateData(pWidget));
- CFX_Matrix mt;
- pFFWidget->GetRotateMatrix(mt);
- CFX_RectF rtRotateAnchor(rtAnchor);
- mt.TransformRect(rtRotateAnchor);
- pFFWidget->GetDoc()->GetDocProvider()->GetPopupPos(
- pFFWidget, fMinHeight, fMaxHeight, rtRotateAnchor, rtPopup);
- return TRUE;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwladapter.h"
+#include "xfa_ffwidget.h"
+#include "xfa_fffield.h"
+#include "xfa_ffdoc.h"
+IFWL_AdapterNative* FWL_CreateFuelAdapterNative() {
+ return NULL;
+}
+void FWL_ReleaseFuelAdapterNative(IFWL_AdapterNative* native) {}
+void FWL_PostMessageToMainRoop(CFWL_Message* pMessage) {}
+FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget,
+ FX_BOOL bVisible,
+ const CFX_RectF* pRtAnchor) {
+ CXFA_FFWidget* pXFAWidget = (CXFA_FFWidget*)pWidget->GetPrivateData(pWidget);
+ if (!pXFAWidget) {
+ return FALSE;
+ }
+ IXFA_DocProvider* pDocProvider = pXFAWidget->GetDoc()->GetDocProvider();
+ if (!pDocProvider) {
+ return FALSE;
+ }
+ if (bVisible) {
+ CFX_Matrix mt;
+ pXFAWidget->GetRotateMatrix(mt);
+ CFX_RectF rt(*pRtAnchor);
+ mt.TransformRect(rt);
+ pDocProvider->DisplayCaret(pXFAWidget, bVisible, &rt);
+ return TRUE;
+ }
+ pDocProvider->DisplayCaret(pXFAWidget, bVisible, pRtAnchor);
+ return TRUE;
+}
+FWL_ERR CXFA_FWLAdapterWidgetMgr::RepaintWidget(IFWL_Widget* pWidget,
+ const CFX_RectF* pRect) {
+ if (!pWidget)
+ return FWL_ERR_Indefinite;
+ CXFA_FFField* pField = (CXFA_FFField*)pWidget->GetPrivateData(pWidget);
+ if (!pField)
+ return FWL_ERR_Indefinite;
+#ifdef _XFA_EMB
+ CFX_RectF rtInvalidate;
+ pWidget->GetWidgetRect(rtInvalidate);
+ if (pRect) {
+ rtInvalidate.left += pRect->left;
+ rtInvalidate.top += pRect->top;
+ rtInvalidate.width = pRect->width;
+ rtInvalidate.height = pRect->height;
+ }
+ CFX_Matrix mt;
+ pField->GetRotateMatrix(mt);
+ mt.TransformRect(rtInvalidate);
+ pField->AddInvalidateRect(&rtInvalidate);
+#else
+ pField->AddInvalidateRect(NULL);
+#endif
+ return FWL_ERR_Succeeded;
+}
+FX_BOOL CXFA_FWLAdapterWidgetMgr::GetPopupPos(IFWL_Widget* pWidget,
+ FX_FLOAT fMinHeight,
+ FX_FLOAT fMaxHeight,
+ const CFX_RectF& rtAnchor,
+ CFX_RectF& rtPopup) {
+ CXFA_FFWidget* pFFWidget = (CXFA_FFWidget*)(pWidget->GetPrivateData(pWidget));
+ CFX_Matrix mt;
+ pFFWidget->GetRotateMatrix(mt);
+ CFX_RectF rtRotateAnchor(rtAnchor);
+ mt.TransformRect(rtRotateAnchor);
+ pFFWidget->GetDoc()->GetDocProvider()->GetPopupPos(
+ pFFWidget, fMinHeight, fMaxHeight, rtRotateAnchor, rtPopup);
+ return TRUE;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_fwladapter.h b/xfa/src/fxfa/src/app/xfa_fwladapter.h
index 7c2be65a7d..2b05d1ec89 100644
--- a/xfa/src/fxfa/src/app/xfa_fwladapter.h
+++ b/xfa/src/fxfa/src/app/xfa_fwladapter.h
@@ -1,18 +1,18 @@
-// 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 _XFA_FWL_ADAPTER_IMP_H
-#define _XFA_FWL_ADAPTER_IMP_H
-class CXFA_FWLAdapterWidgetMgr : public CFWL_SDAdapterWidgetMgr {
- public:
- virtual FWL_ERR RepaintWidget(IFWL_Widget* pWidget, const CFX_RectF* pRect);
- virtual FX_BOOL GetPopupPos(IFWL_Widget* pWidget,
- FX_FLOAT fMinHeight,
- FX_FLOAT fMaxHeight,
- const CFX_RectF& rtAnchor,
- CFX_RectF& rtPopup);
-};
-#endif
+// 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 _XFA_FWL_ADAPTER_IMP_H
+#define _XFA_FWL_ADAPTER_IMP_H
+class CXFA_FWLAdapterWidgetMgr : public CFWL_SDAdapterWidgetMgr {
+ public:
+ virtual FWL_ERR RepaintWidget(IFWL_Widget* pWidget, const CFX_RectF* pRect);
+ virtual FX_BOOL GetPopupPos(IFWL_Widget* pWidget,
+ FX_FLOAT fMinHeight,
+ FX_FLOAT fMaxHeight,
+ const CFX_RectF& rtAnchor,
+ CFX_RectF& rtPopup);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_fwltheme.cpp b/xfa/src/fxfa/src/app/xfa_fwltheme.cpp
index 1aa6242b4d..69b9e5f481 100644
--- a/xfa/src/fxfa/src/app/xfa_fwltheme.cpp
+++ b/xfa/src/fxfa/src/app/xfa_fwltheme.cpp
@@ -1,411 +1,411 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_fwltheme.h"
-#include "xfa_ffwidget.h"
-#include "xfa_ffapp.h"
-CXFA_FFWidget* XFA_ThemeGetOuterWidget(IFWL_Widget* pWidget) {
- IFWL_Widget* pOuter = pWidget;
- while (pOuter->GetOuter()) {
- pOuter = pOuter->GetOuter();
- }
- if (pOuter) {
- return (CXFA_FFWidget*)pOuter->GetPrivateData(pOuter);
- }
- return NULL;
-}
-CXFA_FWLTheme::CXFA_FWLTheme(CXFA_FFApp* pApp) : m_pApp(pApp) {
- m_pTextOut = NULL;
- m_dwCapacity = 0;
- m_fCapacity = 0;
- m_pCalendarFont = NULL;
- m_Rect.Set(0, 0, 0, 0);
- m_SizeAboveBelow.Set(0, 0);
- m_pCheckBoxTP = new CXFA_FWLCheckBoxTP;
- m_pListBoxTP = new CFWL_ListBoxTP;
- m_pPictureBoxTP = new CFWL_PictureBoxTP;
- m_pSrollBarTP = new CFWL_ScrollBarTP;
- m_pEditTP = new CXFA_FWLEditTP;
- m_pComboBoxTP = new CFWL_ComboBoxTP;
- m_pMonthCalendarTP = new CFWL_MonthCalendarTP;
- m_pDateTimePickerTP = new CFWL_DateTimePickerTP;
- m_pPushButtonTP = new CFWL_PushButtonTP;
- m_pCaretTP = new CFWL_CaretTP;
- m_pBarcodeTP = new CFWL_BarcodeTP;
- Initialize();
-}
-CXFA_FWLTheme::~CXFA_FWLTheme() {
- Finalize();
- delete m_pCheckBoxTP;
- delete m_pListBoxTP;
- delete m_pPictureBoxTP;
- delete m_pSrollBarTP;
- delete m_pEditTP;
- delete m_pComboBoxTP;
- delete m_pMonthCalendarTP;
- delete m_pDateTimePickerTP;
- delete m_pPushButtonTP;
- delete m_pCaretTP;
- delete m_pBarcodeTP;
-}
-static const FX_WCHAR* g_FWLTheme_CalFonts[] = {
- L"Arial", L"Courier New", L"DejaVu Sans",
-};
-FWL_ERR CXFA_FWLTheme::Initialize() {
- m_pTextOut = IFDE_TextOut::Create();
- for (int32_t i = 0; NULL == m_pCalendarFont &&
- i < sizeof(g_FWLTheme_CalFonts) / sizeof(const FX_WCHAR*);
- i++) {
- m_pCalendarFont = IFX_Font::LoadFont(g_FWLTheme_CalFonts[i], 0, 0,
- m_pApp->GetFDEFontMgr());
- }
- if (NULL == m_pCalendarFont)
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetDefFontByCodePage(
- FX_CODEPAGE_MSWin_WesternEuropean, 0, NULL);
-#else
- m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetFontByCodePage(
- FX_CODEPAGE_MSWin_WesternEuropean, 0, NULL);
-#endif
- FXSYS_assert(NULL != m_pCalendarFont);
- FWLTHEME_Init();
- return FWL_ERR_Succeeded;
-}
-FWL_ERR CXFA_FWLTheme::Finalize() {
- if (m_pTextOut) {
- m_pTextOut->Release();
- m_pTextOut = NULL;
- }
- if (m_pCalendarFont) {
- m_pCalendarFont->Release();
- m_pCalendarFont = NULL;
- }
- FWLTHEME_Release();
- return FWL_ERR_Succeeded;
-}
-FX_BOOL CXFA_FWLTheme::IsValidWidget(IFWL_Widget* pWidget) {
- return TRUE;
-}
-FX_DWORD CXFA_FWLTheme::GetThemeID(IFWL_Widget* pWidget) {
- return 0;
-}
-FX_DWORD CXFA_FWLTheme::SetThemeID(IFWL_Widget* pWidget,
- FX_DWORD dwThemeID,
- FX_BOOL bChildren) {
- return 0;
-}
-FX_BOOL CXFA_FWLTheme::DrawBackground(CFWL_ThemeBackground* pParams) {
- return GetTheme(pParams->m_pWidget)->DrawBackground(pParams);
-}
-FX_BOOL CXFA_FWLTheme::DrawText(CFWL_ThemeText* pParams) {
- if (pParams->m_wsText.IsEmpty()) {
- return FWL_ERR_Indefinite;
- }
- if (pParams->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar) {
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
- if (!pWidget) {
- return FWL_ERR_Indefinite;
- }
- m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
- m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
- m_pTextOut->SetFont(m_pCalendarFont);
- m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
- m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
- if ((pParams->m_iPart == FWL_PART_MCD_DatesIn) &&
- !(pParams->m_dwStates & FWL_ITEMSTATE_MCD_Flag) &&
- (pParams->m_dwStates &
- (FWL_PARTSTATE_MCD_Hovered | FWL_PARTSTATE_MCD_Selected))) {
- m_pTextOut->SetTextColor(0xFFFFFFFF);
- }
- if (pParams->m_iPart == FWL_PART_MCD_Caption) {
- if (m_pMonthCalendarTP->GetThemeID(pParams->m_pWidget) == 0) {
- m_pTextOut->SetTextColor(ArgbEncode(0xff, 0, 153, 255));
- } else {
- m_pTextOut->SetTextColor(ArgbEncode(0xff, 128, 128, 0));
- }
- }
- CFX_Graphics* pGraphics = pParams->m_pGraphics;
- CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
- if (!pRenderDevice)
- return FALSE;
- m_pTextOut->SetRenderDevice(pRenderDevice);
- CFX_Matrix mtPart = pParams->m_matrix;
- CFX_Matrix* pMatrix = pGraphics->GetMatrix();
- if (pMatrix) {
- mtPart.Concat(*pMatrix);
- }
- m_pTextOut->SetMatrix(mtPart);
- m_pTextOut->DrawLogicText(pParams->m_wsText, pParams->m_wsText.GetLength(),
- pParams->m_rtPart);
- return TRUE;
- }
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
- if (!pWidget) {
- return FWL_ERR_Indefinite;
- }
- CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
- CFX_Graphics* pGraphics = pParams->m_pGraphics;
- CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
- if (!pRenderDevice)
- return FALSE;
- m_pTextOut->SetRenderDevice(pRenderDevice);
- m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
- m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
- m_pTextOut->SetFont(pAcc->GetFDEFont());
- m_pTextOut->SetFontSize(pAcc->GetFontSize());
- m_pTextOut->SetTextColor(pAcc->GetTextColor());
- CFX_Matrix mtPart = pParams->m_matrix;
- CFX_Matrix* pMatrix = pGraphics->GetMatrix();
- if (pMatrix) {
- mtPart.Concat(*pMatrix);
- }
- m_pTextOut->SetMatrix(mtPart);
- m_pTextOut->DrawLogicText(pParams->m_wsText, pParams->m_wsText.GetLength(),
- pParams->m_rtPart);
- return TRUE;
-}
-void* CXFA_FWLTheme::GetCapacity(CFWL_ThemePart* pThemePart,
- FX_DWORD dwCapacity) {
- switch (dwCapacity) {
- case FWL_WGTCAPACITY_Font: {
- if (CXFA_FFWidget* pWidget =
- XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
- return pWidget->GetDataAcc()->GetFDEFont();
- }
- } break;
- case FWL_WGTCAPACITY_FontSize: {
- if (CXFA_FFWidget* pWidget =
- XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
- m_fCapacity = pWidget->GetDataAcc()->GetFontSize();
- return &m_fCapacity;
- }
- } break;
- case FWL_WGTCAPACITY_TextColor: {
- if (CXFA_FFWidget* pWidget =
- XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
- m_dwCapacity = pWidget->GetDataAcc()->GetTextColor();
- return &m_dwCapacity;
- }
- } break;
- case FWL_WGTCAPACITY_LineHeight: {
- if (CXFA_FFWidget* pWidget =
- XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
- m_fCapacity = pWidget->GetDataAcc()->GetLineHeight();
- return &m_fCapacity;
- }
- } break;
- case FWL_WGTCAPACITY_ScrollBarWidth: {
- m_fCapacity = 9;
- return &m_fCapacity;
- } break;
- case FWL_WGTCAPACITY_UIMargin: {
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget);
- if (pWidget) {
- CXFA_LayoutItem* pItem = pWidget;
- CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
- pWidgetAcc->GetUIMargin(m_Rect);
- if (CXFA_Para para = pWidgetAcc->GetPara()) {
- m_Rect.left += para.GetMarginLeft();
- if (pWidgetAcc->IsMultiLine()) {
- m_Rect.width += para.GetMarginRight();
- }
- }
- if (pItem->GetPrev() == NULL) {
- if (pItem->GetNext() != NULL) {
- m_Rect.height = 0;
- }
- } else if (pItem->GetNext() == NULL) {
- m_Rect.top = 0;
- } else {
- m_Rect.top = 0;
- m_Rect.height = 0;
- }
- }
- return &m_Rect;
- } break;
- case FWL_WGTCAPACITY_SpaceAboveBelow: {
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget);
- if (pWidget) {
- CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
- if (CXFA_Para para = pWidgetAcc->GetPara()) {
- m_SizeAboveBelow.x = para.GetSpaceAbove();
- m_SizeAboveBelow.y = para.GetSpaceBelow();
- }
- }
- return &m_SizeAboveBelow;
- } break;
- default:
- break;
- }
- if (pThemePart->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar &&
- dwCapacity >= FWL_MCCAPACITY_Sun && dwCapacity <= FWL_MCCAPACITY_Today) {
- if (CXFA_FFWidget* pWidget =
- XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
- IXFA_AppProvider* pAppProvider = pWidget->GetAppProvider();
- m_wsResource.Empty();
- pAppProvider->LoadString(
- XFA_IDS_StringWeekDay_Sun + dwCapacity - FWL_WGTCAPACITY_MAX - 5,
- m_wsResource);
- if (!m_wsResource.IsEmpty()) {
- return &m_wsResource;
- }
- }
- }
- return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity);
-}
-FX_BOOL CXFA_FWLTheme::IsCustomizedLayout(IFWL_Widget* pWidget) {
- return GetTheme(pWidget)->IsCustomizedLayout(pWidget);
-}
-FWL_ERR CXFA_FWLTheme::GetPartRect(CFWL_ThemePart* pThemePart) {
- CFX_RectF rect;
- return GetTheme(pThemePart->m_pWidget)->GetPartRect(pThemePart, rect);
-}
-FX_BOOL CXFA_FWLTheme::IsInPart(CFWL_ThemePart* pThemePart,
- FX_FLOAT fx,
- FX_FLOAT fy) {
- return GetTheme(pThemePart->m_pWidget)->IsInPart(pThemePart, fx, fy);
-}
-FX_BOOL CXFA_FWLTheme::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) {
- if (pParams->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar) {
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
- if (!pWidget) {
- return FWL_ERR_Indefinite;
- }
- if (!pParams)
- return FALSE;
- if (!m_pTextOut)
- return FALSE;
- m_pTextOut->SetFont(m_pCalendarFont);
- m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
- m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
- m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
- m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
- m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(),
- rect);
- return TRUE;
- }
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
- if (!pWidget) {
- return FWL_ERR_Indefinite;
- }
- CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
- m_pTextOut->SetFont(pAcc->GetFDEFont());
- m_pTextOut->SetFontSize(pAcc->GetFontSize());
- m_pTextOut->SetTextColor(pAcc->GetTextColor());
- if (!pParams)
- return FALSE;
- if (!m_pTextOut)
- return FALSE;
- m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
- m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
- m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(),
- rect);
- return TRUE;
-}
-CFWL_WidgetTP* CXFA_FWLTheme::GetTheme(IFWL_Widget* pWidget) {
- switch (pWidget->GetClassID()) {
- case FWL_CLASSHASH_CheckBox:
- return m_pCheckBoxTP;
- case FWL_CLASSHASH_ListBox:
- return m_pListBoxTP;
- case FWL_CLASSHASH_PictureBox:
- return m_pPictureBoxTP;
- case FWL_CLASSHASH_ScrollBar:
- return m_pSrollBarTP;
- case FWL_CLASSHASH_Edit:
- return m_pEditTP;
- case FWL_CLASSHASH_ComboBox:
- return m_pComboBoxTP;
- case FWL_CLASSHASH_MonthCalendar:
- return m_pMonthCalendarTP;
- case FWL_CLASSHASH_DateTimePicker:
- return m_pDateTimePickerTP;
- case FWL_CLASSHASH_PushButton:
- return m_pPushButtonTP;
- case FWL_CLASSHASH_Caret:
- return m_pCaretTP;
- case FWL_CLASSHASH_Barcode:
- return m_pBarcodeTP;
- default:
- break;
- }
- return NULL;
-}
-CXFA_FWLCheckBoxTP::CXFA_FWLCheckBoxTP() {}
-FX_BOOL CXFA_FWLCheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) {
- if (pParams->m_iPart != FWL_PART_CKB_CheckBox) {
- return TRUE;
- }
- if (((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) ==
- FWL_PARTSTATE_CKB_Checked) ||
- ((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) ==
- FWL_PARTSTATE_CKB_Neutral)) {
- DrawCheckSign(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart,
- pParams->m_dwStates, &pParams->m_matrix);
- }
- return TRUE;
-}
-void CXFA_FWLCheckBoxTP::DrawCheckSign(IFWL_Widget* pWidget,
- CFX_Graphics* pGraphics,
- const CFX_RectF* pRtBox,
- int32_t iState,
- CFX_Matrix* pMatrix) {
- CFX_RectF rtSign(*pRtBox);
- FX_DWORD dwColor = 0xFF000000;
- if ((iState & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Neutral) {
- dwColor = 0xFFA9A9A9;
- }
- {
- FX_DWORD dwStyle = pWidget->GetStylesEx();
- rtSign.Deflate(rtSign.width / 4, rtSign.height / 4);
- switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) {
- case FWL_STYLEEXT_CKB_SignShapeCheck:
- DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix);
- break;
- case FWL_STYLEEXT_CKB_SignShapeCircle:
- DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix);
- break;
- case FWL_STYLEEXT_CKB_SignShapeCross:
- DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix);
- break;
- case FWL_STYLEEXT_CKB_SignShapeDiamond:
- DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix);
- break;
- case FWL_STYLEEXT_CKB_SignShapeSquare:
- DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix);
- break;
- case FWL_STYLEEXT_CKB_SignShapeStar:
- DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix);
- break;
- default:
- break;
- }
- }
-}
-CXFA_FWLEditTP::CXFA_FWLEditTP() {}
-CXFA_FWLEditTP::~CXFA_FWLEditTP() {}
-FX_BOOL CXFA_FWLEditTP::DrawBackground(CFWL_ThemeBackground* pParams) {
- if (FWL_PART_EDT_CombTextLine == pParams->m_iPart) {
- CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
- FX_ARGB cr = 0xFF000000;
- FX_FLOAT fWidth = 1.0f;
- if (CXFA_Border borderUI = pWidget->GetDataAcc()->GetUIBorder()) {
- CXFA_Edge edge = borderUI.GetEdge(0);
- if (edge) {
- cr = edge.GetColor();
- fWidth = edge.GetThickness();
- }
- }
- CFX_Color crLine(cr);
- pParams->m_pGraphics->SetStrokeColor(&crLine);
- pParams->m_pGraphics->SetLineWidth(fWidth);
- pParams->m_pGraphics->StrokePath(pParams->m_pPath, &pParams->m_matrix);
- return TRUE;
- }
- return CFWL_EditTP::DrawBackground(pParams);
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_fwltheme.h"
+#include "xfa_ffwidget.h"
+#include "xfa_ffapp.h"
+CXFA_FFWidget* XFA_ThemeGetOuterWidget(IFWL_Widget* pWidget) {
+ IFWL_Widget* pOuter = pWidget;
+ while (pOuter->GetOuter()) {
+ pOuter = pOuter->GetOuter();
+ }
+ if (pOuter) {
+ return (CXFA_FFWidget*)pOuter->GetPrivateData(pOuter);
+ }
+ return NULL;
+}
+CXFA_FWLTheme::CXFA_FWLTheme(CXFA_FFApp* pApp) : m_pApp(pApp) {
+ m_pTextOut = NULL;
+ m_dwCapacity = 0;
+ m_fCapacity = 0;
+ m_pCalendarFont = NULL;
+ m_Rect.Set(0, 0, 0, 0);
+ m_SizeAboveBelow.Set(0, 0);
+ m_pCheckBoxTP = new CXFA_FWLCheckBoxTP;
+ m_pListBoxTP = new CFWL_ListBoxTP;
+ m_pPictureBoxTP = new CFWL_PictureBoxTP;
+ m_pSrollBarTP = new CFWL_ScrollBarTP;
+ m_pEditTP = new CXFA_FWLEditTP;
+ m_pComboBoxTP = new CFWL_ComboBoxTP;
+ m_pMonthCalendarTP = new CFWL_MonthCalendarTP;
+ m_pDateTimePickerTP = new CFWL_DateTimePickerTP;
+ m_pPushButtonTP = new CFWL_PushButtonTP;
+ m_pCaretTP = new CFWL_CaretTP;
+ m_pBarcodeTP = new CFWL_BarcodeTP;
+ Initialize();
+}
+CXFA_FWLTheme::~CXFA_FWLTheme() {
+ Finalize();
+ delete m_pCheckBoxTP;
+ delete m_pListBoxTP;
+ delete m_pPictureBoxTP;
+ delete m_pSrollBarTP;
+ delete m_pEditTP;
+ delete m_pComboBoxTP;
+ delete m_pMonthCalendarTP;
+ delete m_pDateTimePickerTP;
+ delete m_pPushButtonTP;
+ delete m_pCaretTP;
+ delete m_pBarcodeTP;
+}
+static const FX_WCHAR* g_FWLTheme_CalFonts[] = {
+ L"Arial", L"Courier New", L"DejaVu Sans",
+};
+FWL_ERR CXFA_FWLTheme::Initialize() {
+ m_pTextOut = IFDE_TextOut::Create();
+ for (int32_t i = 0; NULL == m_pCalendarFont &&
+ i < sizeof(g_FWLTheme_CalFonts) / sizeof(const FX_WCHAR*);
+ i++) {
+ m_pCalendarFont = IFX_Font::LoadFont(g_FWLTheme_CalFonts[i], 0, 0,
+ m_pApp->GetFDEFontMgr());
+ }
+ if (NULL == m_pCalendarFont)
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetDefFontByCodePage(
+ FX_CODEPAGE_MSWin_WesternEuropean, 0, NULL);
+#else
+ m_pCalendarFont = m_pApp->GetFDEFontMgr()->GetFontByCodePage(
+ FX_CODEPAGE_MSWin_WesternEuropean, 0, NULL);
+#endif
+ FXSYS_assert(NULL != m_pCalendarFont);
+ FWLTHEME_Init();
+ return FWL_ERR_Succeeded;
+}
+FWL_ERR CXFA_FWLTheme::Finalize() {
+ if (m_pTextOut) {
+ m_pTextOut->Release();
+ m_pTextOut = NULL;
+ }
+ if (m_pCalendarFont) {
+ m_pCalendarFont->Release();
+ m_pCalendarFont = NULL;
+ }
+ FWLTHEME_Release();
+ return FWL_ERR_Succeeded;
+}
+FX_BOOL CXFA_FWLTheme::IsValidWidget(IFWL_Widget* pWidget) {
+ return TRUE;
+}
+FX_DWORD CXFA_FWLTheme::GetThemeID(IFWL_Widget* pWidget) {
+ return 0;
+}
+FX_DWORD CXFA_FWLTheme::SetThemeID(IFWL_Widget* pWidget,
+ FX_DWORD dwThemeID,
+ FX_BOOL bChildren) {
+ return 0;
+}
+FX_BOOL CXFA_FWLTheme::DrawBackground(CFWL_ThemeBackground* pParams) {
+ return GetTheme(pParams->m_pWidget)->DrawBackground(pParams);
+}
+FX_BOOL CXFA_FWLTheme::DrawText(CFWL_ThemeText* pParams) {
+ if (pParams->m_wsText.IsEmpty()) {
+ return FWL_ERR_Indefinite;
+ }
+ if (pParams->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar) {
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
+ if (!pWidget) {
+ return FWL_ERR_Indefinite;
+ }
+ m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
+ m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
+ m_pTextOut->SetFont(m_pCalendarFont);
+ m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
+ m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
+ if ((pParams->m_iPart == FWL_PART_MCD_DatesIn) &&
+ !(pParams->m_dwStates & FWL_ITEMSTATE_MCD_Flag) &&
+ (pParams->m_dwStates &
+ (FWL_PARTSTATE_MCD_Hovered | FWL_PARTSTATE_MCD_Selected))) {
+ m_pTextOut->SetTextColor(0xFFFFFFFF);
+ }
+ if (pParams->m_iPart == FWL_PART_MCD_Caption) {
+ if (m_pMonthCalendarTP->GetThemeID(pParams->m_pWidget) == 0) {
+ m_pTextOut->SetTextColor(ArgbEncode(0xff, 0, 153, 255));
+ } else {
+ m_pTextOut->SetTextColor(ArgbEncode(0xff, 128, 128, 0));
+ }
+ }
+ CFX_Graphics* pGraphics = pParams->m_pGraphics;
+ CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
+ if (!pRenderDevice)
+ return FALSE;
+ m_pTextOut->SetRenderDevice(pRenderDevice);
+ CFX_Matrix mtPart = pParams->m_matrix;
+ CFX_Matrix* pMatrix = pGraphics->GetMatrix();
+ if (pMatrix) {
+ mtPart.Concat(*pMatrix);
+ }
+ m_pTextOut->SetMatrix(mtPart);
+ m_pTextOut->DrawLogicText(pParams->m_wsText, pParams->m_wsText.GetLength(),
+ pParams->m_rtPart);
+ return TRUE;
+ }
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
+ if (!pWidget) {
+ return FWL_ERR_Indefinite;
+ }
+ CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
+ CFX_Graphics* pGraphics = pParams->m_pGraphics;
+ CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
+ if (!pRenderDevice)
+ return FALSE;
+ m_pTextOut->SetRenderDevice(pRenderDevice);
+ m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
+ m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
+ m_pTextOut->SetFont(pAcc->GetFDEFont());
+ m_pTextOut->SetFontSize(pAcc->GetFontSize());
+ m_pTextOut->SetTextColor(pAcc->GetTextColor());
+ CFX_Matrix mtPart = pParams->m_matrix;
+ CFX_Matrix* pMatrix = pGraphics->GetMatrix();
+ if (pMatrix) {
+ mtPart.Concat(*pMatrix);
+ }
+ m_pTextOut->SetMatrix(mtPart);
+ m_pTextOut->DrawLogicText(pParams->m_wsText, pParams->m_wsText.GetLength(),
+ pParams->m_rtPart);
+ return TRUE;
+}
+void* CXFA_FWLTheme::GetCapacity(CFWL_ThemePart* pThemePart,
+ FX_DWORD dwCapacity) {
+ switch (dwCapacity) {
+ case FWL_WGTCAPACITY_Font: {
+ if (CXFA_FFWidget* pWidget =
+ XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
+ return pWidget->GetDataAcc()->GetFDEFont();
+ }
+ } break;
+ case FWL_WGTCAPACITY_FontSize: {
+ if (CXFA_FFWidget* pWidget =
+ XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
+ m_fCapacity = pWidget->GetDataAcc()->GetFontSize();
+ return &m_fCapacity;
+ }
+ } break;
+ case FWL_WGTCAPACITY_TextColor: {
+ if (CXFA_FFWidget* pWidget =
+ XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
+ m_dwCapacity = pWidget->GetDataAcc()->GetTextColor();
+ return &m_dwCapacity;
+ }
+ } break;
+ case FWL_WGTCAPACITY_LineHeight: {
+ if (CXFA_FFWidget* pWidget =
+ XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
+ m_fCapacity = pWidget->GetDataAcc()->GetLineHeight();
+ return &m_fCapacity;
+ }
+ } break;
+ case FWL_WGTCAPACITY_ScrollBarWidth: {
+ m_fCapacity = 9;
+ return &m_fCapacity;
+ } break;
+ case FWL_WGTCAPACITY_UIMargin: {
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget);
+ if (pWidget) {
+ CXFA_LayoutItem* pItem = pWidget;
+ CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
+ pWidgetAcc->GetUIMargin(m_Rect);
+ if (CXFA_Para para = pWidgetAcc->GetPara()) {
+ m_Rect.left += para.GetMarginLeft();
+ if (pWidgetAcc->IsMultiLine()) {
+ m_Rect.width += para.GetMarginRight();
+ }
+ }
+ if (pItem->GetPrev() == NULL) {
+ if (pItem->GetNext() != NULL) {
+ m_Rect.height = 0;
+ }
+ } else if (pItem->GetNext() == NULL) {
+ m_Rect.top = 0;
+ } else {
+ m_Rect.top = 0;
+ m_Rect.height = 0;
+ }
+ }
+ return &m_Rect;
+ } break;
+ case FWL_WGTCAPACITY_SpaceAboveBelow: {
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pThemePart->m_pWidget);
+ if (pWidget) {
+ CXFA_WidgetAcc* pWidgetAcc = pWidget->GetDataAcc();
+ if (CXFA_Para para = pWidgetAcc->GetPara()) {
+ m_SizeAboveBelow.x = para.GetSpaceAbove();
+ m_SizeAboveBelow.y = para.GetSpaceBelow();
+ }
+ }
+ return &m_SizeAboveBelow;
+ } break;
+ default:
+ break;
+ }
+ if (pThemePart->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar &&
+ dwCapacity >= FWL_MCCAPACITY_Sun && dwCapacity <= FWL_MCCAPACITY_Today) {
+ if (CXFA_FFWidget* pWidget =
+ XFA_ThemeGetOuterWidget(pThemePart->m_pWidget)) {
+ IXFA_AppProvider* pAppProvider = pWidget->GetAppProvider();
+ m_wsResource.Empty();
+ pAppProvider->LoadString(
+ XFA_IDS_StringWeekDay_Sun + dwCapacity - FWL_WGTCAPACITY_MAX - 5,
+ m_wsResource);
+ if (!m_wsResource.IsEmpty()) {
+ return &m_wsResource;
+ }
+ }
+ }
+ return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity);
+}
+FX_BOOL CXFA_FWLTheme::IsCustomizedLayout(IFWL_Widget* pWidget) {
+ return GetTheme(pWidget)->IsCustomizedLayout(pWidget);
+}
+FWL_ERR CXFA_FWLTheme::GetPartRect(CFWL_ThemePart* pThemePart) {
+ CFX_RectF rect;
+ return GetTheme(pThemePart->m_pWidget)->GetPartRect(pThemePart, rect);
+}
+FX_BOOL CXFA_FWLTheme::IsInPart(CFWL_ThemePart* pThemePart,
+ FX_FLOAT fx,
+ FX_FLOAT fy) {
+ return GetTheme(pThemePart->m_pWidget)->IsInPart(pThemePart, fx, fy);
+}
+FX_BOOL CXFA_FWLTheme::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) {
+ if (pParams->m_pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar) {
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
+ if (!pWidget) {
+ return FWL_ERR_Indefinite;
+ }
+ if (!pParams)
+ return FALSE;
+ if (!m_pTextOut)
+ return FALSE;
+ m_pTextOut->SetFont(m_pCalendarFont);
+ m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
+ m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);
+ m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
+ m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
+ m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(),
+ rect);
+ return TRUE;
+ }
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
+ if (!pWidget) {
+ return FWL_ERR_Indefinite;
+ }
+ CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc();
+ m_pTextOut->SetFont(pAcc->GetFDEFont());
+ m_pTextOut->SetFontSize(pAcc->GetFontSize());
+ m_pTextOut->SetTextColor(pAcc->GetTextColor());
+ if (!pParams)
+ return FALSE;
+ if (!m_pTextOut)
+ return FALSE;
+ m_pTextOut->SetAlignment(pParams->m_iTTOAlign);
+ m_pTextOut->SetStyles(pParams->m_dwTTOStyles);
+ m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(),
+ rect);
+ return TRUE;
+}
+CFWL_WidgetTP* CXFA_FWLTheme::GetTheme(IFWL_Widget* pWidget) {
+ switch (pWidget->GetClassID()) {
+ case FWL_CLASSHASH_CheckBox:
+ return m_pCheckBoxTP;
+ case FWL_CLASSHASH_ListBox:
+ return m_pListBoxTP;
+ case FWL_CLASSHASH_PictureBox:
+ return m_pPictureBoxTP;
+ case FWL_CLASSHASH_ScrollBar:
+ return m_pSrollBarTP;
+ case FWL_CLASSHASH_Edit:
+ return m_pEditTP;
+ case FWL_CLASSHASH_ComboBox:
+ return m_pComboBoxTP;
+ case FWL_CLASSHASH_MonthCalendar:
+ return m_pMonthCalendarTP;
+ case FWL_CLASSHASH_DateTimePicker:
+ return m_pDateTimePickerTP;
+ case FWL_CLASSHASH_PushButton:
+ return m_pPushButtonTP;
+ case FWL_CLASSHASH_Caret:
+ return m_pCaretTP;
+ case FWL_CLASSHASH_Barcode:
+ return m_pBarcodeTP;
+ default:
+ break;
+ }
+ return NULL;
+}
+CXFA_FWLCheckBoxTP::CXFA_FWLCheckBoxTP() {}
+FX_BOOL CXFA_FWLCheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) {
+ if (pParams->m_iPart != FWL_PART_CKB_CheckBox) {
+ return TRUE;
+ }
+ if (((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) ==
+ FWL_PARTSTATE_CKB_Checked) ||
+ ((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) ==
+ FWL_PARTSTATE_CKB_Neutral)) {
+ DrawCheckSign(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart,
+ pParams->m_dwStates, &pParams->m_matrix);
+ }
+ return TRUE;
+}
+void CXFA_FWLCheckBoxTP::DrawCheckSign(IFWL_Widget* pWidget,
+ CFX_Graphics* pGraphics,
+ const CFX_RectF* pRtBox,
+ int32_t iState,
+ CFX_Matrix* pMatrix) {
+ CFX_RectF rtSign(*pRtBox);
+ FX_DWORD dwColor = 0xFF000000;
+ if ((iState & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Neutral) {
+ dwColor = 0xFFA9A9A9;
+ }
+ {
+ FX_DWORD dwStyle = pWidget->GetStylesEx();
+ rtSign.Deflate(rtSign.width / 4, rtSign.height / 4);
+ switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) {
+ case FWL_STYLEEXT_CKB_SignShapeCheck:
+ DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix);
+ break;
+ case FWL_STYLEEXT_CKB_SignShapeCircle:
+ DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix);
+ break;
+ case FWL_STYLEEXT_CKB_SignShapeCross:
+ DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix);
+ break;
+ case FWL_STYLEEXT_CKB_SignShapeDiamond:
+ DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix);
+ break;
+ case FWL_STYLEEXT_CKB_SignShapeSquare:
+ DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix);
+ break;
+ case FWL_STYLEEXT_CKB_SignShapeStar:
+ DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix);
+ break;
+ default:
+ break;
+ }
+ }
+}
+CXFA_FWLEditTP::CXFA_FWLEditTP() {}
+CXFA_FWLEditTP::~CXFA_FWLEditTP() {}
+FX_BOOL CXFA_FWLEditTP::DrawBackground(CFWL_ThemeBackground* pParams) {
+ if (FWL_PART_EDT_CombTextLine == pParams->m_iPart) {
+ CXFA_FFWidget* pWidget = XFA_ThemeGetOuterWidget(pParams->m_pWidget);
+ FX_ARGB cr = 0xFF000000;
+ FX_FLOAT fWidth = 1.0f;
+ if (CXFA_Border borderUI = pWidget->GetDataAcc()->GetUIBorder()) {
+ CXFA_Edge edge = borderUI.GetEdge(0);
+ if (edge) {
+ cr = edge.GetColor();
+ fWidth = edge.GetThickness();
+ }
+ }
+ CFX_Color crLine(cr);
+ pParams->m_pGraphics->SetStrokeColor(&crLine);
+ pParams->m_pGraphics->SetLineWidth(fWidth);
+ pParams->m_pGraphics->StrokePath(pParams->m_pPath, &pParams->m_matrix);
+ return TRUE;
+ }
+ return CFWL_EditTP::DrawBackground(pParams);
+}
diff --git a/xfa/src/fxfa/src/app/xfa_fwltheme.h b/xfa/src/fxfa/src/app/xfa_fwltheme.h
index d08a7ad2ac..8b4c9385bf 100644
--- a/xfa/src/fxfa/src/app/xfa_fwltheme.h
+++ b/xfa/src/fxfa/src/app/xfa_fwltheme.h
@@ -1,92 +1,92 @@
-// 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 _XFA_FWL_THEME_IMP_H
-#define _XFA_FWL_THEME_IMP_H
-class CXFA_FWLTheme : public IFWL_ThemeProvider {
- public:
- CXFA_FWLTheme(CXFA_FFApp* pApp);
- virtual ~CXFA_FWLTheme();
- virtual FWL_ERR Release() {
- delete this;
- return FWL_ERR_Succeeded;
- }
- virtual IFWL_Target* Retain() { return NULL; }
- virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const {
- return FWL_ERR_Succeeded;
- }
- virtual FX_DWORD GetHashCode() const { return 0; }
- virtual FWL_ERR Initialize();
- virtual FWL_ERR Finalize();
- virtual FX_BOOL IsValidWidget(IFWL_Widget* pWidget);
- virtual FX_DWORD GetThemeID(IFWL_Widget* pWidget);
- virtual FX_DWORD SetThemeID(IFWL_Widget* pWidget,
- FX_DWORD dwThemeID,
- FX_BOOL bChildren = TRUE);
- virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
- virtual FX_BOOL DrawText(CFWL_ThemeText* pParams);
- virtual void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity);
- virtual FX_BOOL IsCustomizedLayout(IFWL_Widget* pWidget);
- virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart);
- virtual FX_BOOL IsInPart(CFWL_ThemePart* pThemePart,
- FX_FLOAT fx,
- FX_FLOAT fy);
-
- virtual FX_BOOL CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect);
- virtual FWL_ERR GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) {
- return FWL_ERR_Succeeded;
- }
- virtual FWL_ERR SetThemeMatrix(IFWL_Widget* pWidget,
- const CFX_Matrix& matrix) {
- return FWL_ERR_Succeeded;
- }
- virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) {
- return FWL_ERR_Succeeded;
- }
-
- protected:
- CFWL_WidgetTP* GetTheme(IFWL_Widget* pWidget);
- CFWL_CheckBoxTP* m_pCheckBoxTP;
- CFWL_ListBoxTP* m_pListBoxTP;
- CFWL_PictureBoxTP* m_pPictureBoxTP;
- CFWL_ScrollBarTP* m_pSrollBarTP;
- CFWL_EditTP* m_pEditTP;
- CFWL_ComboBoxTP* m_pComboBoxTP;
- CFWL_MonthCalendarTP* m_pMonthCalendarTP;
- CFWL_DateTimePickerTP* m_pDateTimePickerTP;
- CFWL_PushButtonTP* m_pPushButtonTP;
- CFWL_CaretTP* m_pCaretTP;
- CFWL_BarcodeTP* m_pBarcodeTP;
- IFDE_TextOut* m_pTextOut;
- FX_FLOAT m_fCapacity;
- FX_DWORD m_dwCapacity;
- IFX_Font* m_pCalendarFont;
- CFX_WideString m_wsResource;
- CXFA_FFApp* m_pApp;
- CFX_RectF m_Rect;
- CFX_SizeF m_SizeAboveBelow;
-};
-class CXFA_FWLCheckBoxTP : public CFWL_CheckBoxTP {
- public:
- CXFA_FWLCheckBoxTP();
- virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
-
- protected:
- void DrawCheckSign(IFWL_Widget* pWidget,
- CFX_Graphics* pGraphics,
- const CFX_RectF* pRtBox,
- int32_t iState,
- CFX_Matrix* pMatrix);
-};
-class CXFA_FWLEditTP : public CFWL_EditTP {
- public:
- CXFA_FWLEditTP();
- virtual ~CXFA_FWLEditTP();
-
- public:
- virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
-};
-#endif
+// 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 _XFA_FWL_THEME_IMP_H
+#define _XFA_FWL_THEME_IMP_H
+class CXFA_FWLTheme : public IFWL_ThemeProvider {
+ public:
+ CXFA_FWLTheme(CXFA_FFApp* pApp);
+ virtual ~CXFA_FWLTheme();
+ virtual FWL_ERR Release() {
+ delete this;
+ return FWL_ERR_Succeeded;
+ }
+ virtual IFWL_Target* Retain() { return NULL; }
+ virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const {
+ return FWL_ERR_Succeeded;
+ }
+ virtual FX_DWORD GetHashCode() const { return 0; }
+ virtual FWL_ERR Initialize();
+ virtual FWL_ERR Finalize();
+ virtual FX_BOOL IsValidWidget(IFWL_Widget* pWidget);
+ virtual FX_DWORD GetThemeID(IFWL_Widget* pWidget);
+ virtual FX_DWORD SetThemeID(IFWL_Widget* pWidget,
+ FX_DWORD dwThemeID,
+ FX_BOOL bChildren = TRUE);
+ virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
+ virtual FX_BOOL DrawText(CFWL_ThemeText* pParams);
+ virtual void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity);
+ virtual FX_BOOL IsCustomizedLayout(IFWL_Widget* pWidget);
+ virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart);
+ virtual FX_BOOL IsInPart(CFWL_ThemePart* pThemePart,
+ FX_FLOAT fx,
+ FX_FLOAT fy);
+
+ virtual FX_BOOL CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect);
+ virtual FWL_ERR GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) {
+ return FWL_ERR_Succeeded;
+ }
+ virtual FWL_ERR SetThemeMatrix(IFWL_Widget* pWidget,
+ const CFX_Matrix& matrix) {
+ return FWL_ERR_Succeeded;
+ }
+ virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) {
+ return FWL_ERR_Succeeded;
+ }
+
+ protected:
+ CFWL_WidgetTP* GetTheme(IFWL_Widget* pWidget);
+ CFWL_CheckBoxTP* m_pCheckBoxTP;
+ CFWL_ListBoxTP* m_pListBoxTP;
+ CFWL_PictureBoxTP* m_pPictureBoxTP;
+ CFWL_ScrollBarTP* m_pSrollBarTP;
+ CFWL_EditTP* m_pEditTP;
+ CFWL_ComboBoxTP* m_pComboBoxTP;
+ CFWL_MonthCalendarTP* m_pMonthCalendarTP;
+ CFWL_DateTimePickerTP* m_pDateTimePickerTP;
+ CFWL_PushButtonTP* m_pPushButtonTP;
+ CFWL_CaretTP* m_pCaretTP;
+ CFWL_BarcodeTP* m_pBarcodeTP;
+ IFDE_TextOut* m_pTextOut;
+ FX_FLOAT m_fCapacity;
+ FX_DWORD m_dwCapacity;
+ IFX_Font* m_pCalendarFont;
+ CFX_WideString m_wsResource;
+ CXFA_FFApp* m_pApp;
+ CFX_RectF m_Rect;
+ CFX_SizeF m_SizeAboveBelow;
+};
+class CXFA_FWLCheckBoxTP : public CFWL_CheckBoxTP {
+ public:
+ CXFA_FWLCheckBoxTP();
+ virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
+
+ protected:
+ void DrawCheckSign(IFWL_Widget* pWidget,
+ CFX_Graphics* pGraphics,
+ const CFX_RectF* pRtBox,
+ int32_t iState,
+ CFX_Matrix* pMatrix);
+};
+class CXFA_FWLEditTP : public CFWL_EditTP {
+ public:
+ CXFA_FWLEditTP();
+ virtual ~CXFA_FWLEditTP();
+
+ public:
+ virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_rendercontext.cpp b/xfa/src/fxfa/src/app/xfa_rendercontext.cpp
index 2d8ed0dd02..8a8aeb63b2 100644
--- a/xfa/src/fxfa/src/app/xfa_rendercontext.cpp
+++ b/xfa/src/fxfa/src/app/xfa_rendercontext.cpp
@@ -1,75 +1,75 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_rendercontext.h"
-#include "xfa_ffwidget.h"
-#define XFA_RENDERCONTEXT_MaxCount 30
-IXFA_RenderContext* XFA_RenderContext_Create() {
- return new CXFA_RenderContext;
-}
-CXFA_RenderContext::CXFA_RenderContext() {
- m_pWidgetIterator = NULL;
- m_pWidget = NULL;
- m_pPageView = NULL;
- m_pGS = NULL;
- m_dwStatus = 0;
- m_matrix.SetIdentity();
- m_rtClipRect.Reset();
-}
-CXFA_RenderContext::~CXFA_RenderContext() {
- StopRender();
-}
-int32_t CXFA_RenderContext::StartRender(IXFA_PageView* pPageView,
- CFX_Graphics* pGS,
- const CFX_Matrix& matrix,
- const CXFA_RenderOptions& options) {
- m_pPageView = pPageView;
- m_pGS = pGS;
- m_matrix = matrix;
- m_options = options;
- CFX_RectF rtPage;
- pGS->GetClipRect(rtPage);
- CFX_Matrix mtRes;
- mtRes.SetReverse(matrix);
- m_rtClipRect.Set(rtPage.left, rtPage.top, rtPage.width, rtPage.height);
- mtRes.TransformRect(m_rtClipRect);
- m_dwStatus = m_options.m_bHighlight ? XFA_WIDGETSTATUS_Highlight : 0;
- FX_DWORD dwFilterType = XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_AllType |
- (m_options.m_bPrint ? XFA_WIDGETSTATUS_Printable
- : XFA_WIDGETSTATUS_Viewable);
- m_pWidgetIterator =
- m_pPageView->CreateWidgetIterator(XFA_TRAVERSEWAY_Form, dwFilterType);
- m_pWidget = m_pWidgetIterator->MoveToNext();
- return XFA_RENDERSTATUS_Ready;
-}
-int32_t CXFA_RenderContext::DoRender(IFX_Pause* pPause) {
- int32_t iCount = 0;
- while (m_pWidget) {
- CXFA_FFWidget* pWidget = (CXFA_FFWidget*)m_pWidget;
- CFX_RectF rtWidgetBox;
- pWidget->GetBBox(rtWidgetBox, XFA_WIDGETSTATUS_Visible);
- rtWidgetBox.width += 1;
- rtWidgetBox.height += 1;
- if (rtWidgetBox.IntersectWith(m_rtClipRect)) {
- pWidget->RenderWidget(m_pGS, &m_matrix, m_dwStatus);
- }
- m_pWidget = m_pWidgetIterator->MoveToNext();
- iCount++;
- if (iCount > XFA_RENDERCONTEXT_MaxCount && pPause &&
- pPause->NeedToPauseNow()) {
- return XFA_RENDERSTATUS_ToBeContinued;
- }
- }
- return XFA_RENDERSTATUS_Done;
-}
-void CXFA_RenderContext::StopRender() {
- if (m_pWidgetIterator) {
- m_pWidgetIterator->Release();
- m_pWidgetIterator = NULL;
- }
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_rendercontext.h"
+#include "xfa_ffwidget.h"
+#define XFA_RENDERCONTEXT_MaxCount 30
+IXFA_RenderContext* XFA_RenderContext_Create() {
+ return new CXFA_RenderContext;
+}
+CXFA_RenderContext::CXFA_RenderContext() {
+ m_pWidgetIterator = NULL;
+ m_pWidget = NULL;
+ m_pPageView = NULL;
+ m_pGS = NULL;
+ m_dwStatus = 0;
+ m_matrix.SetIdentity();
+ m_rtClipRect.Reset();
+}
+CXFA_RenderContext::~CXFA_RenderContext() {
+ StopRender();
+}
+int32_t CXFA_RenderContext::StartRender(IXFA_PageView* pPageView,
+ CFX_Graphics* pGS,
+ const CFX_Matrix& matrix,
+ const CXFA_RenderOptions& options) {
+ m_pPageView = pPageView;
+ m_pGS = pGS;
+ m_matrix = matrix;
+ m_options = options;
+ CFX_RectF rtPage;
+ pGS->GetClipRect(rtPage);
+ CFX_Matrix mtRes;
+ mtRes.SetReverse(matrix);
+ m_rtClipRect.Set(rtPage.left, rtPage.top, rtPage.width, rtPage.height);
+ mtRes.TransformRect(m_rtClipRect);
+ m_dwStatus = m_options.m_bHighlight ? XFA_WIDGETSTATUS_Highlight : 0;
+ FX_DWORD dwFilterType = XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_AllType |
+ (m_options.m_bPrint ? XFA_WIDGETSTATUS_Printable
+ : XFA_WIDGETSTATUS_Viewable);
+ m_pWidgetIterator =
+ m_pPageView->CreateWidgetIterator(XFA_TRAVERSEWAY_Form, dwFilterType);
+ m_pWidget = m_pWidgetIterator->MoveToNext();
+ return XFA_RENDERSTATUS_Ready;
+}
+int32_t CXFA_RenderContext::DoRender(IFX_Pause* pPause) {
+ int32_t iCount = 0;
+ while (m_pWidget) {
+ CXFA_FFWidget* pWidget = (CXFA_FFWidget*)m_pWidget;
+ CFX_RectF rtWidgetBox;
+ pWidget->GetBBox(rtWidgetBox, XFA_WIDGETSTATUS_Visible);
+ rtWidgetBox.width += 1;
+ rtWidgetBox.height += 1;
+ if (rtWidgetBox.IntersectWith(m_rtClipRect)) {
+ pWidget->RenderWidget(m_pGS, &m_matrix, m_dwStatus);
+ }
+ m_pWidget = m_pWidgetIterator->MoveToNext();
+ iCount++;
+ if (iCount > XFA_RENDERCONTEXT_MaxCount && pPause &&
+ pPause->NeedToPauseNow()) {
+ return XFA_RENDERSTATUS_ToBeContinued;
+ }
+ }
+ return XFA_RENDERSTATUS_Done;
+}
+void CXFA_RenderContext::StopRender() {
+ if (m_pWidgetIterator) {
+ m_pWidgetIterator->Release();
+ m_pWidgetIterator = NULL;
+ }
+}
diff --git a/xfa/src/fxfa/src/app/xfa_rendercontext.h b/xfa/src/fxfa/src/app/xfa_rendercontext.h
index cf37e3ea57..cdb2bea4f7 100644
--- a/xfa/src/fxfa/src/app/xfa_rendercontext.h
+++ b/xfa/src/fxfa/src/app/xfa_rendercontext.h
@@ -1,31 +1,31 @@
-// 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 _FXFA_FORMFILLER_RENDERCONTEXT_IMP_H
-#define _FXFA_FORMFILLER_RENDERCONTEXT_IMP_H
-class CXFA_RenderContext : public IXFA_RenderContext {
- public:
- CXFA_RenderContext();
- virtual ~CXFA_RenderContext();
- virtual void Release() { delete this; }
- virtual int32_t StartRender(IXFA_PageView* pPageView,
- CFX_Graphics* pGS,
- const CFX_Matrix& matrix,
- const CXFA_RenderOptions& options);
- virtual int32_t DoRender(IFX_Pause* pPause = NULL);
- virtual void StopRender();
-
- protected:
- IXFA_WidgetIterator* m_pWidgetIterator;
- IXFA_Widget* m_pWidget;
- IXFA_PageView* m_pPageView;
- CFX_Graphics* m_pGS;
- CFX_Matrix m_matrix;
- CXFA_RenderOptions m_options;
- FX_DWORD m_dwStatus;
- CFX_RectF m_rtClipRect;
-};
-#endif
+// 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 _FXFA_FORMFILLER_RENDERCONTEXT_IMP_H
+#define _FXFA_FORMFILLER_RENDERCONTEXT_IMP_H
+class CXFA_RenderContext : public IXFA_RenderContext {
+ public:
+ CXFA_RenderContext();
+ virtual ~CXFA_RenderContext();
+ virtual void Release() { delete this; }
+ virtual int32_t StartRender(IXFA_PageView* pPageView,
+ CFX_Graphics* pGS,
+ const CFX_Matrix& matrix,
+ const CXFA_RenderOptions& options);
+ virtual int32_t DoRender(IFX_Pause* pPause = NULL);
+ virtual void StopRender();
+
+ protected:
+ IXFA_WidgetIterator* m_pWidgetIterator;
+ IXFA_Widget* m_pWidget;
+ IXFA_PageView* m_pPageView;
+ CFX_Graphics* m_pGS;
+ CFX_Matrix m_matrix;
+ CXFA_RenderOptions m_options;
+ FX_DWORD m_dwStatus;
+ CFX_RectF m_rtClipRect;
+};
+#endif
diff --git a/xfa/src/fxfa/src/app/xfa_textlayout.cpp b/xfa/src/fxfa/src/app/xfa_textlayout.cpp
index 4eddabc0bd..b949734fe9 100644
--- a/xfa/src/fxfa/src/app/xfa_textlayout.cpp
+++ b/xfa/src/fxfa/src/app/xfa_textlayout.cpp
@@ -1,2022 +1,2022 @@
-// 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 "xfa/src/foxitlib.h"
-#include "xfa/src/fxfa/src/common/xfa_common.h"
-#include "xfa_textlayout.h"
-#include "xfa_ffapp.h"
-#include "xfa_ffdoc.h"
-#include "xfa_fontmgr.h"
-CXFA_CSSTagProvider::~CXFA_CSSTagProvider() {
- FX_POSITION pos = m_Attributes.GetStartPosition();
- while (pos) {
- CFX_WideString *pName = NULL, *pValue = NULL;
- m_Attributes.GetNextAssoc(pos, (void*&)pName, (void*&)pValue);
- if (pName != NULL) {
- delete pName;
- }
- if (pValue != NULL) {
- delete pValue;
- }
- }
-}
-void CXFA_CSSTagProvider::GetNextAttribute(FX_POSITION& pos,
- CFX_WideStringC& wsAttr,
- CFX_WideStringC& wsValue) {
- if (pos == NULL) {
- return;
- }
- CFX_WideString* pName = NULL;
- CFX_WideString* pValue = NULL;
- m_Attributes.GetNextAssoc(pos, (void*&)pName, (void*&)pValue);
- wsAttr = *pName;
- wsValue = *pValue;
-}
-void CXFA_CSSTagProvider::SetAttribute(const CFX_WideString& wsAttr,
- const CFX_WideString& wsValue) {
- CFX_WideString* pName = new CFX_WideString();
- CFX_WideString* pValue = new CFX_WideString();
- *pName = wsAttr;
- *pValue = wsValue;
- m_Attributes.SetAt(pName, pValue);
-}
-void CXFA_TextParseContext::SetDecls(const IFDE_CSSDeclaration** ppDeclArray,
- int32_t iDeclCount) {
- if (iDeclCount <= 0 || ppDeclArray == NULL) {
- return;
- }
- m_dwMatchedDecls = iDeclCount;
- m_ppMatchedDecls = FX_Alloc(IFDE_CSSDeclaration*, iDeclCount);
- FX_memcpy(m_ppMatchedDecls, ppDeclArray,
- iDeclCount * sizeof(IFDE_CSSDeclaration*));
-}
-CXFA_TextParser::~CXFA_TextParser() {
- if (m_pUASheet != NULL) {
- m_pUASheet->Release();
- }
- if (m_pSelector != NULL) {
- m_pSelector->Release();
- }
- if (m_pAllocator != NULL) {
- m_pAllocator->Release();
- }
- FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition();
- while (ps) {
- IFDE_XMLNode* pXMLNode;
- CXFA_TextParseContext* pParseContext;
- m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
- if (pParseContext != NULL) {
- FDE_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext);
- }
- }
- m_mapXMLNodeToParseContext.RemoveAll();
-}
-void CXFA_TextParser::Reset() {
- FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition();
- while (ps) {
- IFDE_XMLNode* pXMLNode;
- CXFA_TextParseContext* pParseContext;
- m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
- if (pParseContext != NULL) {
- FDE_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext);
- }
- }
- m_mapXMLNodeToParseContext.RemoveAll();
- if (m_pAllocator != NULL) {
- m_pAllocator->Release();
- m_pAllocator = NULL;
- }
-}
-void CXFA_TextParser::InitCSSData(IXFA_TextProvider* pTextProvider) {
- if (pTextProvider == NULL) {
- return;
- }
- if (m_pSelector == NULL) {
- CXFA_FFDoc* pDoc = pTextProvider->GetDocNode();
- IFX_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr();
- FXSYS_assert(pFontMgr != NULL);
- m_pSelector = IFDE_CSSStyleSelector::Create();
- m_pSelector->SetFontMgr(pFontMgr);
- FX_FLOAT fFontSize = 10;
- CXFA_Font font = pTextProvider->GetFontNode();
- if (font.IsExistInXML()) {
- fFontSize = font.GetFontSize();
- }
- m_pSelector->SetDefFontSize(fFontSize);
- }
- if (m_pUASheet == NULL) {
- m_pUASheet = LoadDefaultSheetStyle();
- m_pSelector->SetStyleSheet(FDE_CSSSTYLESHEETGROUP_UserAgent, m_pUASheet);
- m_pSelector->UpdateStyleIndex(FDE_CSSMEDIATYPE_ALL);
- }
-}
-IFDE_CSSStyleSheet* CXFA_TextParser::LoadDefaultSheetStyle() {
- static const FX_WCHAR s_pStyle[] =
- L"html,body,ol,p,ul{display:block}"
- L"li{display:list-item}"
- L"ol,ul{padding-left:33px}ol{list-style-type:decimal}ol,ul{margin-top:0;"
- L"margin-bottom:0}ul,ol{margin:1.12em 0}"
- L"a{color:#0000ff;text-decoration:underline}b{font-weight:bolder}i{font-"
- L"style:italic}"
- L"sup{vertical-align:+15em;font-size:.66em}sub{vertical-align:-15em;font-"
- L"size:.66em}";
- return IFDE_CSSStyleSheet::LoadFromBuffer(
- CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8);
-}
-IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
- IXFA_TextProvider* pTextProvider) {
- CXFA_Font font = pTextProvider->GetFontNode();
- CXFA_Para para = pTextProvider->GetParaNode();
- IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(NULL);
- IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
- IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
- FX_FLOAT fLineHeight = 0, fFontSize = 10;
- if (para.IsExistInXML()) {
- fLineHeight = para.GetLineHeight();
- FDE_CSSLENGTH indent;
- indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent());
- pParaStyle->SetTextIndent(indent);
- FDE_CSSTEXTALIGN hAlgin = FDE_CSSTEXTALIGN_Left;
- switch (para.GetHorizontalAlign()) {
- case XFA_ATTRIBUTEENUM_Center:
- hAlgin = FDE_CSSTEXTALIGN_Center;
- break;
- case XFA_ATTRIBUTEENUM_Right:
- hAlgin = FDE_CSSTEXTALIGN_Right;
- break;
- case XFA_ATTRIBUTEENUM_Justify:
- hAlgin = FDE_CSSTEXTALIGN_Justify;
- break;
- case XFA_ATTRIBUTEENUM_JustifyAll:
- hAlgin = FDE_CSSTEXTALIGN_JustifyAll;
- break;
- }
- pParaStyle->SetTextAlign(hAlgin);
- FDE_CSSRECT rtMarginWidth;
- rtMarginWidth.left.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginLeft());
- rtMarginWidth.top.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceAbove());
- rtMarginWidth.right.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginRight());
- rtMarginWidth.bottom.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceBelow());
- pStyle->GetBoundaryStyles()->SetMarginWidth(rtMarginWidth);
- }
- if (font.IsExistInXML()) {
- pFontStyle->SetColor(font.GetColor());
- pFontStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFONTSTYLE_Italic
- : FDE_CSSFONTSTYLE_Normal);
- pFontStyle->SetFontWeight(font.IsBold() ? FXFONT_FW_BOLD
- : FXFONT_FW_NORMAL);
- pParaStyle->SetNumberVerticalAlign(-font.GetBaselineShift());
- fFontSize = font.GetFontSize();
- FDE_CSSLENGTH letterSpacing;
- letterSpacing.Set(FDE_CSSLENGTHUNIT_Point, font.GetLetterSpacing());
- pParaStyle->SetLetterSpacing(letterSpacing);
- FX_DWORD dwDecoration = 0;
- if (font.GetLineThrough() > 0) {
- dwDecoration |= FDE_CSSTEXTDECORATION_LineThrough;
- }
- if (font.GetUnderline() > 1) {
- dwDecoration |= FDE_CSSTEXTDECORATION_Double;
- } else if (font.GetUnderline() > 0) {
- dwDecoration |= FDE_CSSTEXTDECORATION_Underline;
- }
- pParaStyle->SetTextDecoration(dwDecoration);
- }
- pParaStyle->SetLineHeight(fLineHeight);
- pFontStyle->SetFontSize(fFontSize);
- return pStyle;
-}
-IFDE_CSSComputedStyle* CXFA_TextParser::CreateStyle(
- IFDE_CSSComputedStyle* pParentStyle) {
- IFDE_CSSComputedStyle* pNewStyle =
- m_pSelector->CreateComputedStyle(pParentStyle);
- FXSYS_assert(pNewStyle != NULL);
- if (pParentStyle) {
- IFDE_CSSParagraphStyle* pParaStyle = pParentStyle->GetParagraphStyles();
- FX_DWORD dwDecoration = pParaStyle->GetTextDecoration();
- FX_FLOAT fBaseLine = 0;
- if (pParaStyle->GetVerticalAlign() == FDE_CSSVERTICALALIGN_Number) {
- fBaseLine = pParaStyle->GetNumberVerticalAlign();
- }
- pParaStyle = pNewStyle->GetParagraphStyles();
- pParaStyle->SetTextDecoration(dwDecoration);
- pParaStyle->SetNumberVerticalAlign(fBaseLine);
- IFDE_CSSBoundaryStyle* pBoundarytyle = pParentStyle->GetBoundaryStyles();
- const FDE_CSSRECT* pRect = pBoundarytyle->GetMarginWidth();
- if (pRect != NULL) {
- pBoundarytyle = pNewStyle->GetBoundaryStyles();
- pBoundarytyle->SetMarginWidth(*pRect);
- }
- }
- return pNewStyle;
-}
-IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
- IFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle) {
- CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>(
- m_mapXMLNodeToParseContext.GetValueAt(pXMLNode));
- if (!pContext)
- return nullptr;
- pContext->m_pParentStyle = pParentStyle;
- pParentStyle->AddRef();
- CXFA_CSSTagProvider tagProvider;
- ParseTagInfo(pXMLNode, tagProvider);
- if (tagProvider.m_bContent)
- return nullptr;
- IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
- IFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
- pCSSAccel->OnEnterTag(&tagProvider);
- m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(),
- pContext->CountDecls(), pStyle);
- pCSSAccel->OnLeaveTag(&tagProvider);
- return pStyle;
-}
-void CXFA_TextParser::DoParse(IFDE_XMLNode* pXMLContainer,
- IXFA_TextProvider* pTextProvider) {
- if (pXMLContainer == NULL || pTextProvider == NULL || m_pAllocator != NULL) {
- return;
- }
- m_pAllocator =
- FX_CreateAllocator(FX_ALLOCTYPE_Fixed, 32, sizeof(CXFA_CSSTagProvider));
- InitCSSData(pTextProvider);
- IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider);
- ParseRichText(pXMLContainer, pRootStyle);
- pRootStyle->Release();
-}
-void CXFA_TextParser::ParseRichText(IFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle) {
- if (pXMLNode == NULL) {
- return;
- }
- CXFA_CSSTagProvider tagProvider;
- ParseTagInfo(pXMLNode, tagProvider);
- if (!tagProvider.m_bTagAviliable) {
- return;
- }
- IFDE_CSSComputedStyle* pNewStyle = NULL;
- if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) ||
- (tagProvider.GetTagName() != FX_WSTRC(L"html"))) {
- CXFA_TextParseContext* pTextContext =
- FDE_NewWith(m_pAllocator) CXFA_TextParseContext;
- FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_Inline;
- if (!tagProvider.m_bContent) {
- pNewStyle = CreateStyle(pParentStyle);
- IFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
- pCSSAccel->OnEnterTag(&tagProvider);
- CFDE_CSSDeclarationArray DeclArray;
- int32_t iMatchedDecls =
- m_pSelector->MatchDeclarations(&tagProvider, DeclArray);
- const IFDE_CSSDeclaration** ppMatchDecls =
- (const IFDE_CSSDeclaration**)DeclArray.GetData();
- m_pSelector->ComputeStyle(&tagProvider, ppMatchDecls, iMatchedDecls,
- pNewStyle);
- pCSSAccel->OnLeaveTag(&tagProvider);
- if (iMatchedDecls > 0) {
- pTextContext->SetDecls(ppMatchDecls, iMatchedDecls);
- }
- eDisplay = pNewStyle->GetPositionStyles()->GetDisplay();
- }
- pTextContext->SetDisplay(eDisplay);
- m_mapXMLNodeToParseContext.SetAt(pXMLNode, pTextContext);
- }
- for (IFDE_XMLNode* pXMLChild =
- pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild);
- pXMLChild;
- pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- ParseRichText(pXMLChild, pNewStyle);
- }
- if (pNewStyle != NULL) {
- pNewStyle->Release();
- }
-}
-void CXFA_TextParser::ParseTagInfo(IFDE_XMLNode* pXMLNode,
- CXFA_CSSTagProvider& tagProvider) {
- static const FX_DWORD s_XFATagName[] = {
- 0x61, 0x62, 0x69, 0x70, 0x0001f714,
- 0x00022a55, 0x000239bb, 0x00025881, 0x0bd37faa, 0x0bd37fb8,
- 0xa73e3af2, 0xb182eaae, 0xdb8ac455,
- };
- CFX_WideString wsName;
- if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
- IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode;
- pXMLElement->GetLocalTagName(wsName);
- tagProvider.SetTagNameObj(wsName);
- FX_DWORD dwHashCode =
- FX_HashCode_String_GetW(wsName, wsName.GetLength(), TRUE);
- static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(FX_DWORD);
- CFX_DSPATemplate<FX_DWORD> lookup;
- tagProvider.m_bTagAviliable =
- lookup.Lookup(dwHashCode, s_XFATagName, s_iCount) > -1;
- CFX_WideString wsValue;
- pXMLElement->GetString(FX_WSTRC(L"style").GetPtr(), wsValue);
- if (!wsValue.IsEmpty()) {
- tagProvider.SetAttribute(FX_WSTRC(L"style"), wsValue);
- }
- } else if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
- tagProvider.m_bTagAviliable = TRUE;
- tagProvider.m_bContent = TRUE;
- }
-}
-int32_t CXFA_TextParser::GetVAlgin(IXFA_TextProvider* pTextProvider) const {
- int32_t iAlign = XFA_ATTRIBUTEENUM_Top;
- CXFA_Para para = pTextProvider->GetParaNode();
- if (para.IsExistInXML()) {
- iAlign = para.GetVerticalAlign();
- }
- return iAlign;
-}
-FX_FLOAT CXFA_TextParser::GetTabInterval(IFDE_CSSComputedStyle* pStyle) const {
- CFX_WideString wsValue;
- if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue)) {
- CXFA_Measurement ms(wsValue);
- return ms.ToUnit(XFA_UNIT_Pt);
- }
- return 36;
-}
-int32_t CXFA_TextParser::CountTabs(IFDE_CSSComputedStyle* pStyle) const {
- CFX_WideString wsValue;
- if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-count"), wsValue)) {
- return wsValue.GetInteger();
- }
- return 0;
-}
-FX_BOOL CXFA_TextParser::IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const {
- CFX_WideString wsValue;
- if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-spacerun"), wsValue)) {
- wsValue.MakeLower();
- return wsValue == FX_WSTRC(L"yes");
- }
- return FALSE;
-}
-IFX_Font* CXFA_TextParser::GetFont(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
- CFX_WideStringC wsFamily = FX_WSTRC(L"Courier");
- FX_DWORD dwStyle = 0;
- CXFA_Font font = pTextProvider->GetFontNode();
- if (font.IsExistInXML()) {
- font.GetTypeface(wsFamily);
- if (font.IsBold()) {
- dwStyle |= FX_FONTSTYLE_Bold;
- }
- if (font.IsItalic()) {
- dwStyle |= FX_FONTSTYLE_Italic;
- }
- }
- if (pStyle) {
- IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
- int32_t iCount = pFontStyle->CountFontFamilies();
- if (iCount > 0) {
- wsFamily = pFontStyle->GetFontFamily(iCount - 1);
- }
- dwStyle = 0;
- if (pFontStyle->GetFontWeight() > FXFONT_FW_NORMAL) {
- dwStyle |= FX_FONTSTYLE_Bold;
- }
- if (pFontStyle->GetFontStyle() == FDE_CSSFONTSTYLE_Italic) {
- dwStyle |= FX_FONTSTYLE_Italic;
- }
- }
- CXFA_FFDoc* pDoc = pTextProvider->GetDocNode();
- FXSYS_assert(pDoc != NULL);
- CXFA_FontMgr* pFontMgr = pDoc->GetApp()->GetXFAFontMgr();
- return pFontMgr->GetFont(pDoc, wsFamily, dwStyle);
-}
-FX_FLOAT CXFA_TextParser::GetFontSize(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
- if (pStyle != NULL) {
- return pStyle->GetFontStyles()->GetFontSize();
- }
- CXFA_Font font = pTextProvider->GetFontNode();
- if (font.IsExistInXML()) {
- return font.GetFontSize();
- }
- return 10;
-}
-int32_t CXFA_TextParser::GetHorScale(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- IFDE_XMLNode* pXMLNode) const {
- if (pStyle) {
- CFX_WideString wsValue;
- if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-horizontal-scale"),
- wsValue)) {
- return wsValue.GetInteger();
- }
- while (pXMLNode) {
- CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>(
- m_mapXMLNodeToParseContext.GetValueAt(pXMLNode));
- if (pContext && pContext->m_pParentStyle &&
- pContext->m_pParentStyle->GetCustomStyle(
- FX_WSTRC(L"xfa-font-horizontal-scale"), wsValue)) {
- return wsValue.GetInteger();
- }
- pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::Parent);
- }
- }
- if (CXFA_Font font = pTextProvider->GetFontNode()) {
- return static_cast<int32_t>(font.GetHorizontalScale());
- }
- return 100;
-}
-int32_t CXFA_TextParser::GetVerScale(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
- if (pStyle != NULL) {
- CFX_WideString wsValue;
- if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-vertical-scale"), wsValue)) {
- return wsValue.GetInteger();
- }
- }
- if (CXFA_Font font = pTextProvider->GetFontNode()) {
- return (int32_t)font.GetVerticalScale();
- }
- return 100;
-}
-void CXFA_TextParser::GetUnderline(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- int32_t& iUnderline,
- int32_t& iPeriod) const {
- iUnderline = 0;
- iPeriod = XFA_ATTRIBUTEENUM_All;
- if (pStyle) {
- FX_DWORD dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration();
- if (dwDecoration & FDE_CSSTEXTDECORATION_Double) {
- iUnderline = 2;
- } else if (dwDecoration & FDE_CSSTEXTDECORATION_Underline) {
- iUnderline = 1;
- }
- CFX_WideString wsValue;
- if (pStyle->GetCustomStyle(FX_WSTRC(L"underlinePeriod"), wsValue)) {
- if (wsValue == FX_WSTRC(L"word")) {
- iPeriod = XFA_ATTRIBUTEENUM_Word;
- }
- } else if (CXFA_Font font = pTextProvider->GetFontNode()) {
- iPeriod = font.GetUnderlinePeriod();
- }
- } else {
- CXFA_Font font = pTextProvider->GetFontNode();
- if (font.IsExistInXML()) {
- iUnderline = font.GetUnderline();
- iPeriod = font.GetUnderlinePeriod();
- }
- }
-}
-void CXFA_TextParser::GetLinethrough(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- int32_t& iLinethrough) const {
- if (pStyle) {
- FX_DWORD dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration();
- iLinethrough = (dwDecoration & FDE_CSSTEXTDECORATION_LineThrough) ? 1 : 0;
- } else {
- CXFA_Font font = pTextProvider->GetFontNode();
- if (font.IsExistInXML()) {
- iLinethrough = font.GetLineThrough();
- }
- }
-}
-FX_ARGB CXFA_TextParser::GetColor(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
- if (pStyle != NULL) {
- return pStyle->GetFontStyles()->GetColor();
- }
- if (CXFA_Font font = pTextProvider->GetFontNode()) {
- return font.GetColor();
- }
- return 0xFF000000;
-}
-FX_FLOAT CXFA_TextParser::GetBaseline(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const {
- if (pStyle != NULL) {
- IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
- if (pParaStyle->GetVerticalAlign() == FDE_CSSVERTICALALIGN_Number) {
- return pParaStyle->GetNumberVerticalAlign();
- }
- } else if (CXFA_Font font = pTextProvider->GetFontNode()) {
- return font.GetBaselineShift();
- }
- return 0;
-}
-FX_FLOAT CXFA_TextParser::GetLineHeight(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- FX_BOOL bFirst,
- FX_FLOAT fVerScale) const {
- FX_FLOAT fLineHeight = 0;
- if (pStyle != NULL) {
- fLineHeight = pStyle->GetParagraphStyles()->GetLineHeight();
- } else if (CXFA_Para para = pTextProvider->GetParaNode()) {
- fLineHeight = para.GetLineHeight();
- }
- if (bFirst) {
- FX_FLOAT fFontSize = GetFontSize(pTextProvider, pStyle);
- if (fLineHeight < 0.1f) {
- fLineHeight = fFontSize;
- } else {
- fLineHeight = std::min(fLineHeight, fFontSize);
- }
- } else if (fLineHeight < 0.1f) {
- fLineHeight = GetFontSize(pTextProvider, pStyle) * 1.2f;
- }
- fLineHeight *= fVerScale;
- return fLineHeight;
-}
-FX_BOOL CXFA_TextParser::GetEmbbedObj(IXFA_TextProvider* pTextProvider,
- IFDE_XMLNode* pXMLNode,
- CFX_WideString& wsValue) {
- wsValue.Empty();
- if (pXMLNode == NULL) {
- return FALSE;
- }
- FX_BOOL bRet = FALSE;
- if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
- IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLNode;
- CFX_WideString wsAttr;
- pElement->GetString(FX_WSTRC(L"xfa:embed").GetPtr(), wsAttr);
- if (wsAttr.IsEmpty()) {
- return FALSE;
- }
- if (wsAttr.GetAt(0) == L'#') {
- wsAttr.Delete(0);
- }
- CFX_WideString ws;
- pElement->GetString(FX_WSTRC(L"xfa:embedType").GetPtr(), ws);
- if (ws.IsEmpty()) {
- ws = L"som";
- } else {
- ws.MakeLower();
- }
- FX_BOOL bURI = (ws == FX_WSTRC(L"uri"));
- if (!bURI && ws != FX_WSTRC(L"som")) {
- return FALSE;
- }
- ws.Empty();
- pElement->GetString(FX_WSTRC(L"xfa:embedMode").GetPtr(), ws);
- if (ws.IsEmpty()) {
- ws = L"formatted";
- } else {
- ws.MakeLower();
- }
- FX_BOOL bRaw = (ws == FX_WSTRC(L"raw"));
- if (!bRaw && ws != FX_WSTRC(L"formatted")) {
- return FALSE;
- }
- bRet = pTextProvider->GetEmbbedObj(bURI, bRaw, wsAttr, wsValue);
- }
- return bRet;
-}
-CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
- IFDE_XMLNode* pXMLNode) {
- return (CXFA_TextParseContext*)m_mapXMLNodeToParseContext.GetValueAt(
- pXMLNode);
-}
-enum XFA_TABSTOPSSTATUS {
- XFA_TABSTOPSSTATUS_Error,
- XFA_TABSTOPSSTATUS_EOS,
- XFA_TABSTOPSSTATUS_None,
- XFA_TABSTOPSSTATUS_Alignment,
- XFA_TABSTOPSSTATUS_StartLeader,
- XFA_TABSTOPSSTATUS_Leader,
- XFA_TABSTOPSSTATUS_Location,
-};
-FX_BOOL CXFA_TextParser::GetTabstops(
- IFDE_CSSComputedStyle* pStyle,
- CXFA_TextTabstopsContext* pTabstopContext) {
- if (pStyle == NULL || pTabstopContext == NULL) {
- return FALSE;
- }
- CFX_WideString wsValue;
- if (!pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-stops"), wsValue) &&
- !pStyle->GetCustomStyle(FX_WSTRC(L"tab-stops"), wsValue)) {
- return FALSE;
- }
- int32_t iLength = wsValue.GetLength();
- const FX_WCHAR* pTabStops = wsValue;
- int32_t iCur = 0;
- int32_t iLast = 0;
- CFX_WideString wsAlign;
- XFA_TABSTOPSSTATUS eStatus = XFA_TABSTOPSSTATUS_None;
- FX_WCHAR ch;
- while (iCur < iLength) {
- ch = pTabStops[iCur];
- switch (eStatus) {
- case XFA_TABSTOPSSTATUS_None:
- if (ch <= ' ') {
- iCur++;
- } else {
- eStatus = XFA_TABSTOPSSTATUS_Alignment;
- iLast = iCur;
- }
- break;
- case XFA_TABSTOPSSTATUS_Alignment:
- if (ch == ' ') {
- wsAlign = CFX_WideStringC(pTabStops + iLast, iCur - iLast);
- eStatus = XFA_TABSTOPSSTATUS_StartLeader;
- iCur++;
- while (iCur < iLength && pTabStops[iCur] <= ' ') {
- iCur++;
- }
- iLast = iCur;
- } else {
- iCur++;
- }
- break;
- case XFA_TABSTOPSSTATUS_StartLeader:
- if (ch != 'l') {
- eStatus = XFA_TABSTOPSSTATUS_Location;
- } else {
- int32_t iCount = 0;
- while (iCur < iLength) {
- ch = pTabStops[iCur];
- iCur++;
- if (ch == '(') {
- iCount++;
- } else if (ch == ')') {
- iCount--;
- if (iCount == 0) {
- break;
- }
- }
- }
- while (iCur < iLength && pTabStops[iCur] <= ' ') {
- iCur++;
- }
- iLast = iCur;
- eStatus = XFA_TABSTOPSSTATUS_Location;
- }
- break;
- case XFA_TABSTOPSSTATUS_Location:
- if (ch == ' ') {
- FX_DWORD dwHashCode =
- FX_HashCode_String_GetW(wsAlign, wsAlign.GetLength(), TRUE);
- CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
- FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt);
- pTabstopContext->Append(dwHashCode, fPos);
- wsAlign.Empty();
- eStatus = XFA_TABSTOPSSTATUS_None;
- }
- iCur++;
- break;
- default:
- break;
- }
- }
- if (!wsAlign.IsEmpty()) {
- FX_DWORD dwHashCode =
- FX_HashCode_String_GetW(wsAlign, wsAlign.GetLength(), TRUE);
- CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
- FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt);
- pTabstopContext->Append(dwHashCode, fPos);
- }
- return TRUE;
-}
-CXFA_TextLayout::CXFA_TextLayout(IXFA_TextProvider* pTextProvider)
- : m_bHasBlock(FALSE),
- m_pTextProvider(pTextProvider),
- m_pTextDataNode(nullptr),
- m_bRichText(FALSE),
- m_pAllocator(nullptr),
- m_pBreak(nullptr),
- m_pLoader(nullptr),
- m_iLines(0),
- m_fMaxWidth(0),
- m_pTabstopContext(nullptr),
- m_bBlockContinue(TRUE) {
- FXSYS_assert(m_pTextProvider);
-}
-CXFA_TextLayout::~CXFA_TextLayout() {
- m_textParser.Reset();
- delete m_pLoader;
- delete m_pTabstopContext;
- Unload();
-}
-void CXFA_TextLayout::Unload() {
- int32_t iCount = m_pieceLines.GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- CXFA_PieceLine* pLine = m_pieceLines.GetAt(i);
- FDE_DeleteWith(CXFA_PieceLine, m_pAllocator, pLine);
- }
- m_pieceLines.RemoveAll();
- if (m_pBreak != NULL) {
- m_pBreak->Release();
- m_pBreak = NULL;
- }
- if (m_pAllocator != NULL) {
- m_pAllocator->Release();
- m_pAllocator = NULL;
- }
-}
-const CXFA_PieceLineArray* CXFA_TextLayout::GetPieceLines() {
- return &m_pieceLines;
-}
-void CXFA_TextLayout::GetTextDataNode() {
- if (m_pTextProvider == NULL) {
- return;
- }
- CXFA_Node* pNode = m_pTextProvider->GetTextNode(m_bRichText);
- if (pNode && m_bRichText) {
- m_textParser.Reset();
- }
- m_pTextDataNode = pNode;
-}
-IFDE_XMLNode* CXFA_TextLayout::GetXMLContainerNode() {
- IFDE_XMLNode* pXMLContainer = NULL;
- if (m_bRichText) {
- IFDE_XMLNode* pXMLRoot = m_pTextDataNode->GetXMLMappingNode();
- if (!pXMLRoot) {
- return pXMLContainer;
- }
- for (IFDE_XMLNode* pXMLChild =
- pXMLRoot->GetNodeItem(IFDE_XMLNode::FirstChild);
- pXMLChild;
- pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- if (pXMLChild->GetType() == FDE_XMLNODE_Element) {
- IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLChild;
- CFX_WideString wsTag;
- pXMLElement->GetLocalTagName(wsTag);
- if (wsTag.Equal(FX_WSTRC(L"body")) || wsTag.Equal(FX_WSTRC(L"html"))) {
- pXMLContainer = pXMLChild;
- break;
- }
- }
- }
- }
- return pXMLContainer;
-}
-IFX_RTFBreak* CXFA_TextLayout::CreateBreak(FX_BOOL bDefault) {
- FX_DWORD dwStyle = FX_RTFLAYOUTSTYLE_ExpandTab;
- if (!bDefault) {
- dwStyle |= FX_RTFLAYOUTSTYLE_Pagination;
- }
- IFX_RTFBreak* pBreak = IFX_RTFBreak::Create(0);
- pBreak->SetLayoutStyles(dwStyle);
- pBreak->SetLineBreakChar(L'\n');
- pBreak->SetLineBreakTolerance(1);
- pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL));
- pBreak->SetFontSize(m_textParser.GetFontSize(m_pTextProvider, NULL));
- return pBreak;
-}
-void CXFA_TextLayout::InitBreak(FX_FLOAT fLineWidth) {
- CXFA_Font font = m_pTextProvider->GetFontNode();
- CXFA_Para para = m_pTextProvider->GetParaNode();
- FX_FLOAT fStart = 0;
- FX_FLOAT fStartPos = 0;
- if (para.IsExistInXML()) {
- int32_t iAlign = FX_RTFLINEALIGNMENT_Left;
- switch (para.GetHorizontalAlign()) {
- case XFA_ATTRIBUTEENUM_Center:
- iAlign = FX_RTFLINEALIGNMENT_Center;
- break;
- case XFA_ATTRIBUTEENUM_Right:
- iAlign = FX_RTFLINEALIGNMENT_Right;
- break;
- case XFA_ATTRIBUTEENUM_Justify:
- iAlign = FX_RTFLINEALIGNMENT_Justified;
- break;
- case XFA_ATTRIBUTEENUM_JustifyAll:
- iAlign = FX_RTFLINEALIGNMENT_Distributed;
- break;
- }
- m_pBreak->SetAlignment(iAlign);
- fStart = para.GetMarginLeft();
- if (m_pTextProvider->IsCheckButtonAndAutoWidth()) {
- if (iAlign != FX_RTFLINEALIGNMENT_Left) {
- fLineWidth -= para.GetMarginRight();
- }
- } else {
- fLineWidth -= para.GetMarginRight();
- }
- if (fLineWidth < 0) {
- fLineWidth = fStart;
- }
- fStartPos = fStart;
- FX_FLOAT fIndent = para.GetTextIndent();
- if (fIndent > 0) {
- fStartPos += fIndent;
- }
- }
- m_pBreak->SetLineBoundary(fStart, fLineWidth);
- m_pBreak->SetLineStartPos(fStartPos);
- if (font.IsExistInXML()) {
- m_pBreak->SetHorizontalScale((int32_t)font.GetHorizontalScale());
- m_pBreak->SetVerticalScale((int32_t)font.GetVerticalScale());
- m_pBreak->SetCharSpace(font.GetLetterSpacing());
- }
- FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, NULL);
- m_pBreak->SetFontSize(fFontSize);
- m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL));
- m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f);
-}
-void CXFA_TextLayout::InitBreak(IFDE_CSSComputedStyle* pStyle,
- FDE_CSSDISPLAY eDisplay,
- FX_FLOAT fLineWidth,
- IFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle) {
- if (pStyle == NULL) {
- InitBreak(fLineWidth);
- return;
- }
- IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
- if (eDisplay == FDE_CSSDISPLAY_Block || eDisplay == FDE_CSSDISPLAY_ListItem) {
- int32_t iAlign = FX_RTFLINEALIGNMENT_Left;
- switch (pParaStyle->GetTextAlign()) {
- case FDE_CSSTEXTALIGN_Right:
- iAlign = FX_RTFLINEALIGNMENT_Right;
- break;
- case FDE_CSSTEXTALIGN_Center:
- iAlign = FX_RTFLINEALIGNMENT_Center;
- break;
- case FDE_CSSTEXTALIGN_Justify:
- iAlign = FX_RTFLINEALIGNMENT_Justified;
- break;
- case FDE_CSSTEXTALIGN_JustifyAll:
- iAlign = FX_RTFLINEALIGNMENT_Distributed;
- break;
- default:
- break;
- }
- m_pBreak->SetAlignment(iAlign);
- FX_FLOAT fStart = 0;
- const FDE_CSSRECT* pRect = pStyle->GetBoundaryStyles()->GetMarginWidth();
- const FDE_CSSRECT* pPaddingRect =
- pStyle->GetBoundaryStyles()->GetPaddingWidth();
- if (pRect != NULL) {
- fStart = pRect->left.GetValue();
- fLineWidth -= pRect->right.GetValue();
- if (pPaddingRect != NULL) {
- fStart += pPaddingRect->left.GetValue();
- fLineWidth -= pPaddingRect->right.GetValue();
- }
- if (eDisplay == FDE_CSSDISPLAY_ListItem) {
- const FDE_CSSRECT* pParRect =
- pParentStyle->GetBoundaryStyles()->GetMarginWidth();
- const FDE_CSSRECT* pParPaddingRect =
- pParentStyle->GetBoundaryStyles()->GetPaddingWidth();
- if (pParRect != NULL) {
- fStart += pParRect->left.GetValue();
- fLineWidth -= pParRect->right.GetValue();
- if (pParPaddingRect != NULL) {
- fStart += pParPaddingRect->left.GetValue();
- fLineWidth -= pParPaddingRect->right.GetValue();
- }
- }
- FDE_CSSRECT pNewRect;
- pNewRect.left.Set(FDE_CSSLENGTHUNIT_Point, fStart);
- pNewRect.right.Set(FDE_CSSLENGTHUNIT_Point, pRect->right.GetValue());
- pNewRect.top.Set(FDE_CSSLENGTHUNIT_Point, pRect->top.GetValue());
- pNewRect.bottom.Set(FDE_CSSLENGTHUNIT_Point, pRect->bottom.GetValue());
- pStyle->GetBoundaryStyles()->SetMarginWidth(pNewRect);
- }
- }
- m_pBreak->SetLineBoundary(fStart, fLineWidth);
- FX_FLOAT fIndent = pParaStyle->GetTextIndent().GetValue();
- if (fIndent > 0) {
- fStart += fIndent;
- }
- m_pBreak->SetLineStartPos(fStart);
- m_pBreak->SetTabWidth(m_textParser.GetTabInterval(pStyle));
- if (m_pTabstopContext == NULL) {
- m_pTabstopContext = new CXFA_TextTabstopsContext;
- }
- m_textParser.GetTabstops(pStyle, m_pTabstopContext);
- for (int32_t i = 0; i < m_pTabstopContext->m_iTabCount; i++) {
- XFA_TABSTOPS* pTab = m_pTabstopContext->m_tabstops.GetDataPtr(i);
- m_pBreak->AddPositionedTab(pTab->fTabstops);
- }
- }
- FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle);
- m_pBreak->SetFontSize(fFontSize);
- m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f);
- m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, pStyle));
- m_pBreak->SetHorizontalScale(
- m_textParser.GetHorScale(m_pTextProvider, pStyle, pXMLNode));
- m_pBreak->SetVerticalScale(m_textParser.GetVerScale(m_pTextProvider, pStyle));
- m_pBreak->SetCharSpace(pParaStyle->GetLetterSpacing().GetValue());
-}
-int32_t CXFA_TextLayout::GetText(CFX_WideString& wsText) {
- GetTextDataNode();
- wsText.Empty();
- if (m_bRichText) {
- } else {
- wsText = m_pTextDataNode->GetContent();
- }
- return wsText.GetLength();
-}
-FX_FLOAT CXFA_TextLayout::GetLayoutHeight() {
- if (m_pLoader == NULL) {
- return 0;
- }
- int32_t iCount = m_pLoader->m_lineHeights.GetSize();
- if (iCount == 0 && m_pLoader->m_fWidth > 0) {
- CFX_SizeF szMax, szDef;
- szMax.Set(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
- szDef.Set(0, 0);
- m_pLoader->m_bSaveLineHeight = TRUE;
- m_pLoader->m_fLastPos = 0;
- CalcSize(szMax, szMax, szDef);
- m_pLoader->m_bSaveLineHeight = FALSE;
- return szDef.y;
- }
- FX_FLOAT fHeight = m_pLoader->m_fHeight;
- if (fHeight < 0.1f) {
- fHeight = 0;
- for (int32_t i = 0; i < iCount; i++) {
- fHeight += m_pLoader->m_lineHeights.ElementAt(i);
- }
- }
- return fHeight;
-}
-FX_FLOAT CXFA_TextLayout::StartLayout(FX_FLOAT fWidth) {
- if (m_pLoader == NULL) {
- m_pLoader = new CXFA_LoaderContext;
- }
- if (fWidth < 0 || (m_pLoader->m_fWidth > -1 &&
- FXSYS_fabs(fWidth - m_pLoader->m_fWidth) > 0)) {
- m_pLoader->m_lineHeights.RemoveAll();
- m_Blocks.RemoveAll();
- Unload();
- m_pLoader->m_fStartLineOffset = 0;
- }
- m_pLoader->m_fWidth = fWidth;
- if (fWidth < 0) {
- CFX_SizeF szMax, szDef;
- szMax.Set(0, 0);
- szDef.Set(0, 0);
- m_pLoader->m_bSaveLineHeight = TRUE;
- m_pLoader->m_fLastPos = 0;
- CalcSize(szMax, szMax, szDef);
- m_pLoader->m_bSaveLineHeight = FALSE;
- fWidth = szDef.x;
- }
- return fWidth;
-}
-FX_BOOL CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
- FX_FLOAT& fCalcHeight,
- FX_FLOAT fContentAreaHeight,
- FX_FLOAT fTextHeight) {
- if (m_pLoader == NULL) {
- return FALSE;
- }
- int32_t iBlockCount = m_Blocks.GetSize();
- FX_FLOAT fHeight = fTextHeight;
- if (fHeight < 0) {
- fHeight = GetLayoutHeight();
- }
- m_pLoader->m_fHeight = fHeight;
- if (fContentAreaHeight < 0) {
- return FALSE;
- }
- m_bHasBlock = TRUE;
- if (iBlockCount == 0 && fHeight > 0) {
- fHeight = fTextHeight - GetLayoutHeight();
- if (fHeight > 0) {
- int32_t iAlign = m_textParser.GetVAlgin(m_pTextProvider);
- if (iAlign == XFA_ATTRIBUTEENUM_Middle) {
- fHeight /= 2.0f;
- } else if (iAlign != XFA_ATTRIBUTEENUM_Bottom) {
- fHeight = 0;
- }
- m_pLoader->m_fStartLineOffset = fHeight;
- }
- }
- FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset;
- int32_t iLineIndex = 0;
- if (iBlockCount > 1) {
- if (iBlockCount >= (iBlockIndex + 1) * 2) {
- iLineIndex = m_Blocks.ElementAt(iBlockIndex * 2);
- } else {
- iLineIndex = m_Blocks.ElementAt(iBlockCount - 1) +
- m_Blocks.ElementAt(iBlockCount - 2);
- }
- if (m_pLoader->m_BlocksHeight.GetSize() > 0) {
- for (int32_t i = 0; i < iBlockIndex; i++) {
- fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1);
- }
- }
- }
- int32_t iCount = m_pLoader->m_lineHeights.GetSize();
- int32_t i = 0;
- for (i = iLineIndex; i < iCount; i++) {
- FX_FLOAT fLineHeight = m_pLoader->m_lineHeights.ElementAt(i);
- if ((i == iLineIndex) && (fLineHeight - fContentAreaHeight > 0.001)) {
- fCalcHeight = 0;
- return TRUE;
- }
- if (fLinePos + fLineHeight - fContentAreaHeight > 0.001) {
- if (iBlockCount >= (iBlockIndex + 1) * 2) {
- m_Blocks.SetAt(iBlockIndex * 2, iLineIndex);
- m_Blocks.SetAt(iBlockIndex * 2 + 1, i - iLineIndex);
- } else {
- m_Blocks.Add(iLineIndex);
- m_Blocks.Add(i - iLineIndex);
- }
- if (i == iLineIndex) {
- if (fCalcHeight <= fLinePos) {
- if (m_pLoader->m_BlocksHeight.GetSize() > iBlockIndex * 2 &&
- (m_pLoader->m_BlocksHeight.GetAt(iBlockIndex * 2) ==
- iBlockIndex)) {
- m_pLoader->m_BlocksHeight.SetAt(iBlockIndex * 2 + 1, fCalcHeight);
- } else {
- m_pLoader->m_BlocksHeight.Add((FX_FLOAT)iBlockIndex);
- m_pLoader->m_BlocksHeight.Add(fCalcHeight);
- }
- }
- return TRUE;
- }
- fCalcHeight = fLinePos;
- return TRUE;
- }
- fLinePos += fLineHeight;
- }
- return FALSE;
-}
-int32_t CXFA_TextLayout::CountBlocks() const {
- int32_t iCount = m_Blocks.GetSize() / 2;
- return iCount > 0 ? iCount : 1;
-}
-FX_BOOL CXFA_TextLayout::CalcSize(const CFX_SizeF& minSize,
- const CFX_SizeF& maxSize,
- CFX_SizeF& defaultSize) {
- defaultSize.x = maxSize.x;
- if (defaultSize.x < 1) {
- defaultSize.x = 0xFFFF;
- }
- if (m_pBreak != NULL) {
- m_pBreak->Release();
- }
- m_pBreak = CreateBreak(FALSE);
- FX_FLOAT fLinePos = 0;
- m_iLines = 0;
- m_fMaxWidth = 0;
- Loader(defaultSize, fLinePos, FALSE);
- if (fLinePos < 0.1f) {
- fLinePos = m_textParser.GetFontSize(m_pTextProvider, NULL);
- }
- if (m_pTabstopContext) {
- delete m_pTabstopContext;
- m_pTabstopContext = NULL;
- }
- defaultSize.Set(m_fMaxWidth, fLinePos);
- return TRUE;
-}
-FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) {
- if (size.x < 1) {
- return FALSE;
- }
- Unload();
- m_pBreak = CreateBreak(TRUE);
- if (m_pLoader != NULL) {
- m_pLoader->m_iTotalLines = -1;
- m_pLoader->m_iChar = 0;
- }
- m_iLines = 0;
- FX_FLOAT fLinePos = 0;
- Loader(size, fLinePos, TRUE);
- UpdateAlign(size.y, fLinePos);
- if (m_pTabstopContext) {
- delete m_pTabstopContext;
- m_pTabstopContext = NULL;
- }
- if (fHeight) {
- *fHeight = fLinePos;
- }
- return TRUE;
-}
-FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) {
- if (m_pLoader == NULL || iBlock < 0 || iBlock >= CountBlocks()) {
- return FALSE;
- }
- if (m_pLoader->m_fWidth < 1) {
- return FALSE;
- }
- m_pLoader->m_iTotalLines = -1;
- m_iLines = 0;
- FX_FLOAT fLinePos = 0;
- CXFA_Node* pNode = NULL;
- CFX_SizeF szText;
- szText.Set(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
- int32_t iCount = m_Blocks.GetSize();
- int32_t iBlocksHeightCount = m_pLoader->m_BlocksHeight.GetSize();
- iBlocksHeightCount /= 2;
- if (iBlock < iBlocksHeightCount) {
- return TRUE;
- }
- if (iBlock == iBlocksHeightCount) {
- Unload();
- m_pBreak = CreateBreak(TRUE);
- fLinePos = m_pLoader->m_fStartLineOffset;
- for (int32_t i = 0; i < iBlocksHeightCount; i++) {
- fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1);
- }
- m_pLoader->m_iChar = 0;
- if (iCount > 1) {
- m_pLoader->m_iTotalLines = m_Blocks.ElementAt(iBlock * 2 + 1);
- }
- Loader(szText, fLinePos, TRUE);
- if (iCount == 0 && m_pLoader->m_fStartLineOffset < 0.1f) {
- UpdateAlign(szText.y, fLinePos);
- }
- } else if (m_pTextDataNode != NULL) {
- iBlock *= 2;
- if (iBlock < iCount - 2) {
- m_pLoader->m_iTotalLines = m_Blocks.ElementAt(iBlock + 1);
- }
- m_pBreak->Reset();
- if (m_bRichText) {
- IFDE_XMLNode* pContainerNode = GetXMLContainerNode();
- if (!pContainerNode) {
- return TRUE;
- }
- IFDE_XMLNode* pXMLNode = m_pLoader->m_pXMLNode;
- if (pXMLNode == NULL) {
- return TRUE;
- }
- IFDE_XMLNode* pSaveXMLNode = m_pLoader->m_pXMLNode;
- for (; pXMLNode;
- pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- FX_BOOL bFlag = LoadRichText(pXMLNode, szText, fLinePos,
- m_pLoader->m_pParentStyle, TRUE);
- if (!bFlag) {
- break;
- }
- }
- while (pXMLNode == NULL) {
- pXMLNode = pSaveXMLNode->GetNodeItem(IFDE_XMLNode::Parent);
- if (pXMLNode == pContainerNode) {
- break;
- }
- FX_BOOL bFlag =
- LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle,
- TRUE, NULL, FALSE);
- if (!bFlag) {
- break;
- }
- pSaveXMLNode = pXMLNode;
- pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling);
- if (!pXMLNode) {
- continue;
- }
- for (; pXMLNode;
- pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- FX_BOOL bFlag = LoadRichText(pXMLNode, szText, fLinePos,
- m_pLoader->m_pParentStyle, TRUE);
- if (!bFlag) {
- break;
- }
- }
- }
- } else {
- pNode = m_pLoader->m_pNode;
- if (pNode == NULL) {
- return TRUE;
- }
- LoadText(pNode, szText, fLinePos, TRUE);
- }
- }
- if (iBlock == iCount) {
- if (m_pTabstopContext != NULL) {
- delete m_pTabstopContext;
- m_pTabstopContext = NULL;
- }
- if (m_pLoader != NULL) {
- delete m_pLoader;
- m_pLoader = NULL;
- }
- }
- return TRUE;
-}
-void CXFA_TextLayout::ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex) {
- if (!m_pLoader) {
- return;
- }
- int32_t iCountHeight = m_pLoader->m_lineHeights.GetSize();
- if (iCountHeight == 0) {
- return;
- }
- FX_BOOL bEndItem = TRUE;
- int32_t iBlockCount = m_Blocks.GetSize();
- FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset;
- int32_t iLineIndex = 0;
- if (iBlockIndex > 0) {
- int32_t iBlockHeightCount = m_pLoader->m_BlocksHeight.GetSize();
- iBlockHeightCount /= 2;
- if (iBlockHeightCount >= iBlockIndex) {
- for (int32_t i = 0; i < iBlockIndex; i++) {
- fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1);
- }
- } else {
- fLinePos = 0;
- }
- iLineIndex = m_Blocks.ElementAt(iBlockCount - 1) +
- m_Blocks.ElementAt(iBlockCount - 2);
- }
- int32_t i = 0;
- for (i = iLineIndex; i < iCountHeight; i++) {
- FX_FLOAT fLineHeight = m_pLoader->m_lineHeights.ElementAt(i);
- if (fLinePos + fLineHeight - rtText.height > 0.001) {
- m_Blocks.Add(iLineIndex);
- m_Blocks.Add(i - iLineIndex);
- bEndItem = FALSE;
- break;
- }
- fLinePos += fLineHeight;
- }
- if (iCountHeight > 0 && (i - iLineIndex) > 0 && bEndItem) {
- m_Blocks.Add(iLineIndex);
- m_Blocks.Add(i - iLineIndex);
- }
-}
-FX_BOOL CXFA_TextLayout::DrawString(CFX_RenderDevice* pFxDevice,
- const CFX_Matrix& tmDoc2Device,
- const CFX_RectF& rtClip,
- int32_t iBlock) {
- IFDE_RenderDevice* pDevice = IFDE_RenderDevice::Create(pFxDevice);
- if (pDevice == NULL) {
- return FALSE;
- }
- FDE_HDEVICESTATE state = pDevice->SaveState();
- pDevice->SetClipRect(rtClip);
- IFDE_SolidBrush* pSolidBrush =
- (IFDE_SolidBrush*)IFDE_Brush::Create(FDE_BRUSHTYPE_Solid);
- IFDE_Pen* pPen = IFDE_Pen::Create();
- FXSYS_assert(pDevice != NULL && pSolidBrush != NULL && pPen != NULL);
- if (m_pieceLines.GetSize() == 0) {
- int32_t iBlockCount = CountBlocks();
- for (int32_t i = 0; i < iBlockCount; i++) {
- Layout(i);
- }
- }
- FXTEXT_CHARPOS* pCharPos = NULL;
- int32_t iCharCount = 0;
- int32_t iLineStart = 0;
- int32_t iPieceLines = m_pieceLines.GetSize();
- int32_t iCount = m_Blocks.GetSize();
- if (iCount > 0) {
- iBlock *= 2;
- if (iBlock < iCount) {
- iLineStart = m_Blocks.ElementAt(iBlock);
- iPieceLines = m_Blocks.ElementAt(iBlock + 1);
- } else {
- iPieceLines = 0;
- }
- }
- for (int32_t i = 0; i < iPieceLines; i++) {
- if (i + iLineStart >= m_pieceLines.GetSize()) {
- break;
- }
- CXFA_PieceLine* pPieceLine = m_pieceLines.GetAt(i + iLineStart);
- int32_t iPieces = pPieceLine->m_textPieces.GetSize();
- int32_t j = 0;
- for (j = 0; j < iPieces; j++) {
- XFA_LPCTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(j);
- int32_t iChars = pPiece->iChars;
- if (iCharCount < iChars) {
- FX_Free(pCharPos);
- pCharPos = FX_Alloc(FXTEXT_CHARPOS, iChars);
- iCharCount = iChars;
- }
- FXSYS_memset(pCharPos, 0, iCharCount * sizeof(FXTEXT_CHARPOS));
- RenderString(pDevice, pSolidBrush, pPieceLine, j, pCharPos, tmDoc2Device);
- }
- for (j = 0; j < iPieces; j++) {
- RenderPath(pDevice, pPen, pPieceLine, j, pCharPos, tmDoc2Device);
- }
- }
- pDevice->RestoreState(state);
- FX_Free(pCharPos);
- pSolidBrush->Release();
- pPen->Release();
- pDevice->Release();
- return iPieceLines;
-}
-void CXFA_TextLayout::UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom) {
- fHeight -= fBottom;
- if (fHeight < 0.1f) {
- return;
- }
- switch (m_textParser.GetVAlgin(m_pTextProvider)) {
- case XFA_ATTRIBUTEENUM_Middle:
- fHeight /= 2.0f;
- break;
- case XFA_ATTRIBUTEENUM_Bottom:
- break;
- default:
- return;
- }
- int32_t iCount = m_pieceLines.GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- CXFA_PieceLine* pPieceLine = m_pieceLines.GetAt(i);
- int32_t iPieces = pPieceLine->m_textPieces.GetSize();
- for (int32_t j = 0; j < iPieces; j++) {
- XFA_LPTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(j);
- CFX_RectF& rect = pPiece->rtPiece;
- rect.top += fHeight;
- }
- }
-}
-FX_BOOL CXFA_TextLayout::Loader(const CFX_SizeF& szText,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces) {
- if (m_pAllocator == NULL) {
- m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Static, 256, 0);
- }
- GetTextDataNode();
- if (m_pTextDataNode == NULL) {
- return TRUE;
- }
- if (m_bRichText) {
- IFDE_XMLNode* pXMLContainer = GetXMLContainerNode();
- if (pXMLContainer) {
- if (!m_textParser.IsParsed()) {
- m_textParser.DoParse(pXMLContainer, m_pTextProvider);
- }
- IFDE_CSSComputedStyle* pRootStyle =
- m_textParser.CreateRootStyle(m_pTextProvider);
- LoadRichText(pXMLContainer, szText, fLinePos, pRootStyle, bSavePieces);
- pRootStyle->Release();
- }
- } else {
- LoadText(m_pTextDataNode, szText, fLinePos, bSavePieces);
- }
- return TRUE;
-}
-void CXFA_TextLayout::LoadText(CXFA_Node* pNode,
- const CFX_SizeF& szText,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces) {
- InitBreak(szText.x);
- CXFA_Para para = m_pTextProvider->GetParaNode();
- FX_FLOAT fSpaceAbove = 0;
- if (para.IsExistInXML()) {
- fSpaceAbove = para.GetSpaceAbove();
- if (fSpaceAbove < 0.1f) {
- fSpaceAbove = 0;
- }
- int32_t verAlign = para.GetVerticalAlign();
- switch (verAlign) {
- case XFA_ATTRIBUTEENUM_Top:
- case XFA_ATTRIBUTEENUM_Middle:
- case XFA_ATTRIBUTEENUM_Bottom: {
- fLinePos += fSpaceAbove;
- break;
- }
- }
- }
- CFX_WideString wsText = pNode->GetContent();
- wsText.TrimRight(L" ");
- FX_BOOL bRet = AppendChar(wsText, fLinePos, fSpaceAbove, bSavePieces);
- if (bRet && m_pLoader != NULL) {
- m_pLoader->m_pNode = pNode;
- } else {
- EndBreak(FX_RTFBREAK_ParagraphBreak, fLinePos, bSavePieces);
- }
-}
-FX_BOOL CXFA_TextLayout::LoadRichText(IFDE_XMLNode* pXMLNode,
- const CFX_SizeF& szText,
- FX_FLOAT& fLinePos,
- IFDE_CSSComputedStyle* pParentStyle,
- FX_BOOL bSavePieces,
- CXFA_LinkUserData* pLinkData,
- FX_BOOL bEndBreak,
- FX_BOOL bIsOl,
- int32_t iLiCount) {
- if (pXMLNode == NULL) {
- return FALSE;
- }
- CXFA_TextParseContext* pContext =
- m_textParser.GetParseContextFromMap(pXMLNode);
- FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_None;
- FX_BOOL bContentNode = FALSE;
- FX_FLOAT fSpaceBelow = 0;
- IFDE_CSSComputedStyle* pStyle = NULL;
- CFX_WideString wsName;
- if (bEndBreak) {
- FX_BOOL bCurOl = FALSE;
- FX_BOOL bCurLi = FALSE;
- IFDE_XMLElement* pElement = NULL;
- if (pContext != NULL) {
- if (m_bBlockContinue ||
- (m_pLoader && pXMLNode == m_pLoader->m_pXMLNode)) {
- m_bBlockContinue = TRUE;
- }
- if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
- bContentNode = TRUE;
- } else if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
- pElement = (IFDE_XMLElement*)pXMLNode;
- pElement->GetLocalTagName(wsName);
- }
- if (wsName == FX_WSTRC(L"ol")) {
- bIsOl = TRUE;
- bCurOl = TRUE;
- }
- if (m_bBlockContinue || bContentNode == FALSE) {
- eDisplay = pContext->GetDisplay();
- if (eDisplay != FDE_CSSDISPLAY_Block &&
- eDisplay != FDE_CSSDISPLAY_Inline &&
- eDisplay != FDE_CSSDISPLAY_ListItem) {
- return TRUE;
- }
- pStyle = m_textParser.ComputeStyle(pXMLNode, pParentStyle);
- InitBreak(bContentNode ? pParentStyle : pStyle, eDisplay, szText.x,
- pXMLNode, pParentStyle);
- if ((eDisplay == FDE_CSSDISPLAY_Block ||
- eDisplay == FDE_CSSDISPLAY_ListItem) &&
- (pStyle != NULL) &&
- (wsName.IsEmpty() ||
- (wsName != FX_WSTRC(L"body") && wsName != FX_WSTRC(L"html") &&
- wsName != FX_WSTRC(L"ol") && wsName != FX_WSTRC(L"ul")))) {
- const FDE_CSSRECT* pRect =
- pStyle->GetBoundaryStyles()->GetMarginWidth();
- if (pRect) {
- fLinePos += pRect->top.GetValue();
- fSpaceBelow = pRect->bottom.GetValue();
- }
- }
- if (wsName == FX_WSTRC(L"a")) {
- CFX_WideString wsLinkContent;
- FXSYS_assert(pElement);
- pElement->GetString(FX_WSTRC(L"href").GetPtr(), wsLinkContent);
- if (!wsLinkContent.IsEmpty()) {
- pLinkData = FDE_NewWith(m_pAllocator) CXFA_LinkUserData(
- m_pAllocator,
- wsLinkContent.GetBuffer(wsLinkContent.GetLength()));
- wsLinkContent.ReleaseBuffer(wsLinkContent.GetLength());
- }
- }
- int32_t iTabCount =
- m_textParser.CountTabs(bContentNode ? pParentStyle : pStyle);
- FX_BOOL bSpaceRun =
- m_textParser.IsSpaceRun(bContentNode ? pParentStyle : pStyle);
- CFX_WideString wsText;
- if (bContentNode && iTabCount == 0) {
- ((IFDE_XMLText*)pXMLNode)->GetText(wsText);
- } else if (wsName == FX_WSTRC(L"br")) {
- wsText = L'\n';
- } else if (wsName == FX_WSTRC(L"li")) {
- bCurLi = TRUE;
- if (bIsOl) {
- wsText.Format(L"%d. ", iLiCount);
- } else {
- wsText = 0x00B7 + FX_WSTRC(L" ");
- }
- } else if (!bContentNode) {
- if (iTabCount > 0)
- while (iTabCount-- > 0) {
- wsText += L'\t';
- }
- else {
- m_textParser.GetEmbbedObj(m_pTextProvider, pXMLNode, wsText);
- }
- }
- int32_t iLength = wsText.GetLength();
- if (iLength > 0 && bContentNode && !bSpaceRun) {
- ProcessText(wsText);
- }
- if (m_pLoader) {
- if (wsText.GetLength() > 0 &&
- (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) {
- wsText.TrimLeft(0x20);
- }
- if (FDE_CSSDISPLAY_Block == eDisplay) {
- m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
- } else if (FDE_CSSDISPLAY_Inline == eDisplay &&
- (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) {
- m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
- } else if (wsText.GetLength() > 0 &&
- (0x20 == wsText.GetAt(wsText.GetLength() - 1))) {
- m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
- } else if (wsText.GetLength() == 0)
- ;
- else {
- m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
- }
- }
- if (wsText.GetLength() > 0) {
- if (m_pLoader == NULL || m_pLoader->m_iChar == 0) {
- if (pLinkData) {
- pLinkData->AddRef();
- }
- CXFA_TextUserData* pUserData = FDE_NewWith(m_pAllocator)
- CXFA_TextUserData(m_pAllocator,
- bContentNode ? pParentStyle : pStyle,
- pLinkData);
- m_pBreak->SetUserData(pUserData);
- }
- if (AppendChar(wsText, fLinePos, 0, bSavePieces)) {
- if (m_pLoader) {
- m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
- }
- if (IsEnd(bSavePieces)) {
- if (m_pLoader && m_pLoader->m_iTotalLines > -1) {
- m_pLoader->m_pXMLNode = pXMLNode;
- m_pLoader->m_pParentStyle = pParentStyle;
- }
- if (pStyle != NULL) {
- pStyle->Release();
- }
- return FALSE;
- }
- return TRUE;
- }
- }
- }
- }
- FX_BOOL ret = TRUE;
- for (IFDE_XMLNode* pChildNode =
- pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild);
- pChildNode;
- pChildNode = pChildNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
- if (bCurOl) {
- iLiCount++;
- }
- ret = LoadRichText(pChildNode, szText, fLinePos,
- pContext ? pStyle : pParentStyle, bSavePieces,
- pLinkData, TRUE, bIsOl, iLiCount);
- if (ret == FALSE) {
- return FALSE;
- }
- }
- if (m_pLoader) {
- if (FDE_CSSDISPLAY_Block == eDisplay) {
- m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
- }
- }
- if (bCurLi) {
- EndBreak(FX_RTFBREAK_LineBreak, fLinePos, bSavePieces);
- }
- } else {
- if (pContext != NULL) {
- eDisplay = pContext->GetDisplay();
- }
- }
- if (m_bBlockContinue) {
- if (pContext != NULL && !bContentNode) {
- FX_DWORD dwStatus = (eDisplay == FDE_CSSDISPLAY_Block)
- ? FX_RTFBREAK_ParagraphBreak
- : FX_RTFBREAK_PieceBreak;
- EndBreak(dwStatus, fLinePos, bSavePieces);
- if (eDisplay == FDE_CSSDISPLAY_Block) {
- fLinePos += fSpaceBelow;
- if (m_pTabstopContext) {
- m_pTabstopContext->RemoveAll();
- }
- }
- if (wsName == FX_WSTRC(L"a")) {
- if (pLinkData) {
- pLinkData->Release();
- pLinkData = nullptr;
- }
- }
- if (IsEnd(bSavePieces)) {
- if (pStyle) {
- pStyle->Release();
- }
- if (m_pLoader && m_pLoader->m_iTotalLines > -1) {
- m_pLoader->m_pXMLNode =
- pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling);
- m_pLoader->m_pParentStyle = pParentStyle;
- }
- return FALSE;
- }
- }
- }
- if (pStyle != NULL) {
- pStyle->Release();
- }
- return TRUE;
-}
-FX_BOOL CXFA_TextLayout::AppendChar(const CFX_WideString& wsText,
- FX_FLOAT& fLinePos,
- FX_FLOAT fSpaceAbove,
- FX_BOOL bSavePieces) {
- FX_DWORD dwStatus = 0;
- int32_t iChar = 0;
- if (m_pLoader) {
- iChar = m_pLoader->m_iChar;
- }
- int32_t iLength = wsText.GetLength();
- for (int32_t i = iChar; i < iLength; i++) {
- FX_WCHAR wch = wsText.GetAt(i);
- if (wch == 0xA0) {
- wch = 0x20;
- }
- if ((dwStatus = m_pBreak->AppendChar(wch)) > FX_RTFBREAK_PieceBreak) {
- AppendTextLine(dwStatus, fLinePos, bSavePieces);
- if (IsEnd(bSavePieces)) {
- if (m_pLoader != NULL) {
- m_pLoader->m_iChar = i;
- }
- return TRUE;
- }
- if (dwStatus == FX_RTFBREAK_ParagraphBreak && m_bRichText) {
- fLinePos += fSpaceAbove;
- }
- }
- }
- if (m_pLoader) {
- m_pLoader->m_iChar = 0;
- }
- return FALSE;
-}
-FX_BOOL CXFA_TextLayout::IsEnd(FX_BOOL bSavePieces) {
- if (!bSavePieces) {
- return FALSE;
- }
- if (m_pLoader && m_pLoader->m_iTotalLines > 0) {
- return m_iLines >= m_pLoader->m_iTotalLines;
- }
- return FALSE;
-}
-void CXFA_TextLayout::ProcessText(CFX_WideString& wsText) {
- int32_t iLen = wsText.GetLength();
- if (iLen == 0) {
- return;
- }
- FX_WCHAR* psz = wsText.GetBuffer(iLen);
- int32_t iTrimLeft = 0;
- FX_WCHAR wch = 0, wPrev = 0;
- for (int32_t i = 0; i < iLen; i++) {
- wch = psz[i];
- if (wch < 0x20) {
- wch = 0x20;
- }
- if (wch == 0x20 && wPrev == 0x20) {
- continue;
- }
- wPrev = wch;
- psz[iTrimLeft++] = wch;
- }
- wsText.ReleaseBuffer(iLen);
- wsText = wsText.Left(iTrimLeft);
-}
-void CXFA_TextLayout::EndBreak(FX_DWORD dwStatus,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces) {
- dwStatus = m_pBreak->EndBreak(dwStatus);
- if (dwStatus > FX_RTFBREAK_PieceBreak) {
- AppendTextLine(dwStatus, fLinePos, bSavePieces, TRUE);
- }
-}
-void CXFA_TextLayout::DoTabstops(IFDE_CSSComputedStyle* pStyle,
- CXFA_PieceLine* pPieceLine) {
- if (m_pTabstopContext == NULL || m_pTabstopContext->m_iTabCount == 0) {
- return;
- }
- if (pStyle == NULL || pPieceLine == NULL) {
- return;
- }
- int32_t iPieces = pPieceLine->m_textPieces.GetSize();
- if (iPieces == 0) {
- return;
- }
- XFA_LPTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(iPieces - 1);
- int32_t& iTabstopsIndex = m_pTabstopContext->m_iTabIndex;
- int32_t iCount = m_textParser.CountTabs(pStyle);
- if (iTabstopsIndex > m_pTabstopContext->m_iTabCount - 1) {
- return;
- }
- if (iCount > 0) {
- iTabstopsIndex++;
- m_pTabstopContext->m_bTabstops = TRUE;
- FX_FLOAT fRight = 0;
- if (iPieces > 1) {
- XFA_LPTEXTPIECE p = pPieceLine->m_textPieces.GetAt(iPieces - 2);
- fRight = p->rtPiece.right();
- }
- m_pTabstopContext->m_fTabWidth =
- pPiece->rtPiece.width + pPiece->rtPiece.left - fRight;
- } else if (iTabstopsIndex > -1) {
- FX_FLOAT fLeft = 0;
- if (m_pTabstopContext->m_bTabstops) {
- XFA_TABSTOPS* pTabstops =
- m_pTabstopContext->m_tabstops.GetDataPtr(iTabstopsIndex);
- FX_DWORD dwAlgin = pTabstops->dwAlign;
- if (dwAlgin == FX_HashCode_String_GetW(L"center", 6)) {
- fLeft = pPiece->rtPiece.width / 2.0f;
- } else if (dwAlgin == FX_HashCode_String_GetW(L"right", 5) ||
- dwAlgin == FX_HashCode_String_GetW(L"before", 6)) {
- fLeft = pPiece->rtPiece.width;
- } else if (dwAlgin == FX_HashCode_String_GetW(L"decimal", 7)) {
- int32_t iChars = pPiece->iChars;
- for (int32_t i = 0; i < iChars; i++) {
- if (pPiece->pszText[i] == L'.') {
- break;
- }
- fLeft += pPiece->pWidths[i] / 20000.0f;
- }
- }
- m_pTabstopContext->m_fLeft =
- std::min(fLeft, m_pTabstopContext->m_fTabWidth);
- m_pTabstopContext->m_bTabstops = FALSE;
- m_pTabstopContext->m_fTabWidth = 0;
- }
- pPiece->rtPiece.left -= m_pTabstopContext->m_fLeft;
- }
-}
-void CXFA_TextLayout::AppendTextLine(FX_DWORD dwStatus,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces,
- FX_BOOL bEndBreak) {
- int32_t iPieces = m_pBreak->CountBreakPieces();
- if (iPieces < 1) {
- return;
- }
- IFDE_CSSComputedStyle* pStyle = NULL;
- if (bSavePieces) {
- CXFA_PieceLine* pPieceLine = FDE_NewWith(m_pAllocator) CXFA_PieceLine;
- m_pieceLines.Add(pPieceLine);
- if (m_pTabstopContext) {
- m_pTabstopContext->Reset();
- }
- FX_FLOAT fLineStep = 0, fBaseLine = 0;
- int32_t i = 0;
- for (i = 0; i < iPieces; i++) {
- const CFX_RTFPiece* pPiece = m_pBreak->GetBreakPiece(i);
- CXFA_TextUserData* pUserData = (CXFA_TextUserData*)pPiece->m_pUserData;
- if (pUserData != NULL) {
- pStyle = pUserData->m_pStyle;
- }
- FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f;
- XFA_LPTEXTPIECE pTP =
- (XFA_LPTEXTPIECE)m_pAllocator->Alloc(sizeof(XFA_TEXTPIECE));
- pTP->pszText =
- (FX_WCHAR*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(FX_WCHAR));
- pTP->pWidths =
- (int32_t*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(int32_t));
- pTP->iChars = pPiece->m_iChars;
- pPiece->GetString(pTP->pszText);
- pPiece->GetWidths(pTP->pWidths);
- pTP->iBidiLevel = pPiece->m_iBidiLevel;
- pTP->iHorScale = pPiece->m_iHorizontalScale;
- pTP->iVerScale = pPiece->m_iVerticalScale;
- m_textParser.GetUnderline(m_pTextProvider, pStyle, pTP->iUnderline,
- pTP->iPeriod);
- m_textParser.GetLinethrough(m_pTextProvider, pStyle, pTP->iLineThrough);
- pTP->dwColor = m_textParser.GetColor(m_pTextProvider, pStyle);
- pTP->pFont = m_textParser.GetFont(m_pTextProvider, pStyle);
- pTP->fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle);
- pTP->rtPiece.left = pPiece->m_iStartPos / 20000.0f;
- pTP->rtPiece.width = pPiece->m_iWidth / 20000.0f;
- pTP->rtPiece.height = (FX_FLOAT)pPiece->m_iFontSize * fVerScale / 20.0f;
- FX_FLOAT fBaseLineTemp =
- m_textParser.GetBaseline(m_pTextProvider, pStyle);
- pTP->rtPiece.top = fBaseLineTemp;
- pPieceLine->m_textPieces.Add(pTP);
- FX_FLOAT fLineHeight = m_textParser.GetLineHeight(
- m_pTextProvider, pStyle, m_iLines == 0, fVerScale);
- if (fBaseLineTemp > 0) {
- FX_FLOAT fLineHeightTmp = fBaseLineTemp + pTP->rtPiece.height;
- if (fLineHeight < fLineHeightTmp) {
- fLineHeight = fLineHeightTmp;
- } else {
- fBaseLineTemp = 0;
- }
- } else if (fBaseLine < -fBaseLineTemp) {
- fBaseLine = -fBaseLineTemp;
- }
- fLineStep = std::max(fLineStep, fLineHeight);
- if (pUserData != NULL && pUserData->m_pLinkData != NULL) {
- pUserData->m_pLinkData->AddRef();
- pTP->pLinkData = pUserData->m_pLinkData;
- } else {
- pTP->pLinkData = NULL;
- }
- DoTabstops(pStyle, pPieceLine);
- }
- for (i = 0; i < iPieces; i++) {
- XFA_LPTEXTPIECE pTP = pPieceLine->m_textPieces.GetAt(i);
- FX_FLOAT& fTop = pTP->rtPiece.top;
- FX_FLOAT fBaseLineTemp = fTop;
- fTop = fLinePos + fLineStep - pTP->rtPiece.height - fBaseLineTemp;
- fTop = std::max(0.0f, fTop);
- }
- fLinePos += fLineStep + fBaseLine;
- } else {
- FX_FLOAT fLineStep = 0;
- FX_FLOAT fLineWidth = 0;
- for (int32_t i = 0; i < iPieces; i++) {
- const CFX_RTFPiece* pPiece = m_pBreak->GetBreakPiece(i);
- CXFA_TextUserData* pUserData = (CXFA_TextUserData*)pPiece->m_pUserData;
- if (pUserData != NULL) {
- pStyle = pUserData->m_pStyle;
- }
- FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f;
- FX_FLOAT fBaseLine = m_textParser.GetBaseline(m_pTextProvider, pStyle);
- FX_FLOAT fLineHeight = m_textParser.GetLineHeight(
- m_pTextProvider, pStyle, m_iLines == 0, fVerScale);
- if (fBaseLine > 0) {
- FX_FLOAT fLineHeightTmp =
- fBaseLine + (FX_FLOAT)pPiece->m_iFontSize * fVerScale / 20.0f;
- if (fLineHeight < fLineHeightTmp) {
- fLineHeight = fLineHeightTmp;
- }
- }
- fLineStep = std::max(fLineStep, fLineHeight);
- fLineWidth += pPiece->m_iWidth / 20000.0f;
- }
- fLinePos += fLineStep;
- m_fMaxWidth = std::max(m_fMaxWidth, fLineWidth);
- if (m_pLoader && m_pLoader->m_bSaveLineHeight) {
- FX_FLOAT fHeight = fLinePos - m_pLoader->m_fLastPos;
- m_pLoader->m_fLastPos = fLinePos;
- m_pLoader->m_lineHeights.Add(fHeight);
- }
- }
- if (pStyle) {
- pStyle->AddRef();
- }
- m_pBreak->ClearBreakPieces();
- if (dwStatus == FX_RTFBREAK_ParagraphBreak) {
- m_pBreak->Reset();
- if (!pStyle && bEndBreak) {
- CXFA_Para para = m_pTextProvider->GetParaNode();
- if (para.IsExistInXML()) {
- FX_FLOAT fStartPos = para.GetMarginLeft();
- FX_FLOAT fIndent = para.GetTextIndent();
- if (fIndent > 0) {
- fStartPos += fIndent;
- }
- FX_FLOAT fSpaceBelow = para.GetSpaceBelow();
- if (fSpaceBelow < 0.1f) {
- fSpaceBelow = 0;
- }
- m_pBreak->SetLineStartPos(fStartPos);
- fLinePos += fSpaceBelow;
- }
- }
- }
- if (pStyle) {
- FX_FLOAT fStart = 0;
- const FDE_CSSRECT* pRect = pStyle->GetBoundaryStyles()->GetMarginWidth();
- if (pRect) {
- fStart = pRect->left.GetValue();
- }
- FX_FLOAT fTextIndent =
- pStyle->GetParagraphStyles()->GetTextIndent().GetValue();
- if (fTextIndent < 0) {
- fStart -= fTextIndent;
- }
- m_pBreak->SetLineStartPos(fStart);
- pStyle->Release();
- }
- m_iLines++;
-}
-void CXFA_TextLayout::RenderString(IFDE_RenderDevice* pDevice,
- IFDE_SolidBrush* pBrush,
- CXFA_PieceLine* pPieceLine,
- int32_t iPiece,
- FXTEXT_CHARPOS* pCharPos,
- const CFX_Matrix& tmDoc2Device) {
- XFA_LPCTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(iPiece);
- int32_t iCount = GetDisplayPos(pPiece, pCharPos);
- if (iCount > 0) {
- pBrush->SetColor(pPiece->dwColor);
- pDevice->DrawString(pBrush, pPiece->pFont, pCharPos, iCount,
- pPiece->fFontSize, &tmDoc2Device);
- }
- pPieceLine->m_charCounts.Add(iCount);
-}
-void CXFA_TextLayout::RenderPath(IFDE_RenderDevice* pDevice,
- IFDE_Pen* pPen,
- CXFA_PieceLine* pPieceLine,
- int32_t iPiece,
- FXTEXT_CHARPOS* pCharPos,
- const CFX_Matrix& tmDoc2Device) {
- XFA_TEXTPIECE* pPiece = pPieceLine->m_textPieces.GetAt(iPiece);
- FX_BOOL bNoUnderline = pPiece->iUnderline < 1 || pPiece->iUnderline > 2;
- FX_BOOL bNoLineThrough = pPiece->iLineThrough < 1 || pPiece->iLineThrough > 2;
- if (bNoUnderline && bNoLineThrough) {
- return;
- }
- pPen->SetColor(pPiece->dwColor);
- IFDE_Path* pPath = IFDE_Path::Create();
- int32_t iChars = GetDisplayPos(pPiece, pCharPos);
- if (iChars > 0) {
- CFX_PointF pt1, pt2;
- FX_FLOAT fEndY = pCharPos[0].m_OriginY + 1.05f;
- int32_t i = 0;
- if (pPiece->iPeriod == XFA_ATTRIBUTEENUM_Word) {
- for (int32_t i = 0; i < pPiece->iUnderline; i++) {
- for (int32_t j = 0; j < iChars; j++) {
- pt1.x = pCharPos[j].m_OriginX;
- pt2.x =
- pt1.x + pCharPos[j].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
- pt1.y = pt2.y = fEndY;
- pPath->AddLine(pt1, pt2);
- }
- fEndY += 2.0f;
- }
- } else {
- pt1.x = pCharPos[0].m_OriginX;
- pt2.x =
- pCharPos[iChars - 1].m_OriginX +
- pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
- for (int32_t i = 0; i < pPiece->iUnderline; i++) {
- pt1.y = pt2.y = fEndY;
- pPath->AddLine(pt1, pt2);
- fEndY += 2.0f;
- }
- }
- fEndY = pCharPos[0].m_OriginY - pPiece->rtPiece.height * 0.25f;
- pt1.x = pCharPos[0].m_OriginX;
- pt2.x = pCharPos[iChars - 1].m_OriginX +
- pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
- for (i = 0; i < pPiece->iLineThrough; i++) {
- pt1.y = pt2.y = fEndY;
- pPath->AddLine(pt1, pt2);
- fEndY += 2.0f;
- }
- } else {
- if (bNoLineThrough &&
- (bNoUnderline || pPiece->iPeriod != XFA_ATTRIBUTEENUM_All)) {
- goto XFA_RenderPathRet;
- }
- int32_t iCharsTmp = 0;
- int32_t iPiecePrev = iPiece, iPieceNext = iPiece;
- while (iPiecePrev > 0) {
- iPiecePrev--;
- iCharsTmp = pPieceLine->m_charCounts.GetAt(iPiecePrev);
- if (iCharsTmp > 0) {
- break;
- }
- }
- if (iCharsTmp == 0) {
- goto XFA_RenderPathRet;
- }
- iCharsTmp = 0;
- int32_t iPieces = pPieceLine->m_textPieces.GetSize();
- while (iPieceNext < iPieces - 1) {
- iPieceNext++;
- iCharsTmp = pPieceLine->m_charCounts.GetAt(iPieceNext);
- if (iCharsTmp > 0) {
- break;
- }
- }
- if (iCharsTmp == 0) {
- goto XFA_RenderPathRet;
- }
- FX_FLOAT fOrgX = 0.0f, fEndX = 0.0f;
- pPiece = pPieceLine->m_textPieces.GetAt(iPiecePrev);
- iChars = GetDisplayPos(pPiece, pCharPos);
- if (iChars < 1) {
- goto XFA_RenderPathRet;
- }
- fOrgX = pCharPos[iChars - 1].m_OriginX +
- pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
- pPiece = pPieceLine->m_textPieces.GetAt(iPieceNext);
- iChars = GetDisplayPos(pPiece, pCharPos);
- if (iChars < 1) {
- goto XFA_RenderPathRet;
- }
- fEndX = pCharPos[0].m_OriginX;
- CFX_PointF pt1, pt2;
- pt1.x = fOrgX, pt2.x = fEndX;
- FX_FLOAT fEndY = pCharPos[0].m_OriginY + 1.05f;
- int32_t i = 0;
- for (i = 0; i < pPiece->iUnderline; i++) {
- pt1.y = pt2.y = fEndY;
- pPath->AddLine(pt1, pt2);
- fEndY += 2.0f;
- }
- fEndY = pCharPos[0].m_OriginY - pPiece->rtPiece.height * 0.25f;
- for (i = 0; i < pPiece->iLineThrough; i++) {
- pt1.y = pt2.y = fEndY;
- pPath->AddLine(pt1, pt2);
- fEndY += 2.0f;
- }
- }
- pDevice->DrawPath(pPen, 1, pPath, &tmDoc2Device);
-XFA_RenderPathRet:
- pPath->Release();
-}
-int32_t CXFA_TextLayout::GetDisplayPos(XFA_LPCTEXTPIECE pPiece,
- FXTEXT_CHARPOS* pCharPos,
- FX_BOOL bCharCode) {
- if (pPiece == NULL) {
- return 0;
- }
- FX_RTFTEXTOBJ tr;
- if (!ToRun(pPiece, tr)) {
- return 0;
- }
- return m_pBreak->GetDisplayPos(&tr, pCharPos, bCharCode);
-}
-FX_BOOL CXFA_TextLayout::ToRun(XFA_LPCTEXTPIECE pPiece, FX_RTFTEXTOBJ& tr) {
- int32_t iLength = pPiece->iChars;
- if (iLength < 1) {
- return FALSE;
- }
- tr.pStr = pPiece->pszText;
- tr.pFont = pPiece->pFont;
- tr.pRect = &pPiece->rtPiece;
- tr.pWidths = pPiece->pWidths;
- tr.iLength = iLength;
- tr.fFontSize = pPiece->fFontSize;
- tr.iBidiLevel = pPiece->iBidiLevel;
- tr.iCharRotation = 0;
- tr.wLineBreakChar = L'\n';
- tr.iVerticalScale = pPiece->iVerScale;
- tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab;
- tr.iHorizontalScale = pPiece->iHorScale;
- return TRUE;
-}
+// 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 "xfa/src/foxitlib.h"
+#include "xfa/src/fxfa/src/common/xfa_common.h"
+#include "xfa_textlayout.h"
+#include "xfa_ffapp.h"
+#include "xfa_ffdoc.h"
+#include "xfa_fontmgr.h"
+CXFA_CSSTagProvider::~CXFA_CSSTagProvider() {
+ FX_POSITION pos = m_Attributes.GetStartPosition();
+ while (pos) {
+ CFX_WideString *pName = NULL, *pValue = NULL;
+ m_Attributes.GetNextAssoc(pos, (void*&)pName, (void*&)pValue);
+ if (pName != NULL) {
+ delete pName;
+ }
+ if (pValue != NULL) {
+ delete pValue;
+ }
+ }
+}
+void CXFA_CSSTagProvider::GetNextAttribute(FX_POSITION& pos,
+ CFX_WideStringC& wsAttr,
+ CFX_WideStringC& wsValue) {
+ if (pos == NULL) {
+ return;
+ }
+ CFX_WideString* pName = NULL;
+ CFX_WideString* pValue = NULL;
+ m_Attributes.GetNextAssoc(pos, (void*&)pName, (void*&)pValue);
+ wsAttr = *pName;
+ wsValue = *pValue;
+}
+void CXFA_CSSTagProvider::SetAttribute(const CFX_WideString& wsAttr,
+ const CFX_WideString& wsValue) {
+ CFX_WideString* pName = new CFX_WideString();
+ CFX_WideString* pValue = new CFX_WideString();
+ *pName = wsAttr;
+ *pValue = wsValue;
+ m_Attributes.SetAt(pName, pValue);
+}
+void CXFA_TextParseContext::SetDecls(const IFDE_CSSDeclaration** ppDeclArray,
+ int32_t iDeclCount) {
+ if (iDeclCount <= 0 || ppDeclArray == NULL) {
+ return;
+ }
+ m_dwMatchedDecls = iDeclCount;
+ m_ppMatchedDecls = FX_Alloc(IFDE_CSSDeclaration*, iDeclCount);
+ FX_memcpy(m_ppMatchedDecls, ppDeclArray,
+ iDeclCount * sizeof(IFDE_CSSDeclaration*));
+}
+CXFA_TextParser::~CXFA_TextParser() {
+ if (m_pUASheet != NULL) {
+ m_pUASheet->Release();
+ }
+ if (m_pSelector != NULL) {
+ m_pSelector->Release();
+ }
+ if (m_pAllocator != NULL) {
+ m_pAllocator->Release();
+ }
+ FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition();
+ while (ps) {
+ IFDE_XMLNode* pXMLNode;
+ CXFA_TextParseContext* pParseContext;
+ m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
+ if (pParseContext != NULL) {
+ FDE_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext);
+ }
+ }
+ m_mapXMLNodeToParseContext.RemoveAll();
+}
+void CXFA_TextParser::Reset() {
+ FX_POSITION ps = m_mapXMLNodeToParseContext.GetStartPosition();
+ while (ps) {
+ IFDE_XMLNode* pXMLNode;
+ CXFA_TextParseContext* pParseContext;
+ m_mapXMLNodeToParseContext.GetNextAssoc(ps, pXMLNode, pParseContext);
+ if (pParseContext != NULL) {
+ FDE_DeleteWith(CXFA_TextParseContext, m_pAllocator, pParseContext);
+ }
+ }
+ m_mapXMLNodeToParseContext.RemoveAll();
+ if (m_pAllocator != NULL) {
+ m_pAllocator->Release();
+ m_pAllocator = NULL;
+ }
+}
+void CXFA_TextParser::InitCSSData(IXFA_TextProvider* pTextProvider) {
+ if (pTextProvider == NULL) {
+ return;
+ }
+ if (m_pSelector == NULL) {
+ CXFA_FFDoc* pDoc = pTextProvider->GetDocNode();
+ IFX_FontMgr* pFontMgr = pDoc->GetApp()->GetFDEFontMgr();
+ FXSYS_assert(pFontMgr != NULL);
+ m_pSelector = IFDE_CSSStyleSelector::Create();
+ m_pSelector->SetFontMgr(pFontMgr);
+ FX_FLOAT fFontSize = 10;
+ CXFA_Font font = pTextProvider->GetFontNode();
+ if (font.IsExistInXML()) {
+ fFontSize = font.GetFontSize();
+ }
+ m_pSelector->SetDefFontSize(fFontSize);
+ }
+ if (m_pUASheet == NULL) {
+ m_pUASheet = LoadDefaultSheetStyle();
+ m_pSelector->SetStyleSheet(FDE_CSSSTYLESHEETGROUP_UserAgent, m_pUASheet);
+ m_pSelector->UpdateStyleIndex(FDE_CSSMEDIATYPE_ALL);
+ }
+}
+IFDE_CSSStyleSheet* CXFA_TextParser::LoadDefaultSheetStyle() {
+ static const FX_WCHAR s_pStyle[] =
+ L"html,body,ol,p,ul{display:block}"
+ L"li{display:list-item}"
+ L"ol,ul{padding-left:33px}ol{list-style-type:decimal}ol,ul{margin-top:0;"
+ L"margin-bottom:0}ul,ol{margin:1.12em 0}"
+ L"a{color:#0000ff;text-decoration:underline}b{font-weight:bolder}i{font-"
+ L"style:italic}"
+ L"sup{vertical-align:+15em;font-size:.66em}sub{vertical-align:-15em;font-"
+ L"size:.66em}";
+ return IFDE_CSSStyleSheet::LoadFromBuffer(
+ CFX_WideString(), s_pStyle, FXSYS_wcslen(s_pStyle), FX_CODEPAGE_UTF8);
+}
+IFDE_CSSComputedStyle* CXFA_TextParser::CreateRootStyle(
+ IXFA_TextProvider* pTextProvider) {
+ CXFA_Font font = pTextProvider->GetFontNode();
+ CXFA_Para para = pTextProvider->GetParaNode();
+ IFDE_CSSComputedStyle* pStyle = m_pSelector->CreateComputedStyle(NULL);
+ IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
+ IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
+ FX_FLOAT fLineHeight = 0, fFontSize = 10;
+ if (para.IsExistInXML()) {
+ fLineHeight = para.GetLineHeight();
+ FDE_CSSLENGTH indent;
+ indent.Set(FDE_CSSLENGTHUNIT_Point, para.GetTextIndent());
+ pParaStyle->SetTextIndent(indent);
+ FDE_CSSTEXTALIGN hAlgin = FDE_CSSTEXTALIGN_Left;
+ switch (para.GetHorizontalAlign()) {
+ case XFA_ATTRIBUTEENUM_Center:
+ hAlgin = FDE_CSSTEXTALIGN_Center;
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ hAlgin = FDE_CSSTEXTALIGN_Right;
+ break;
+ case XFA_ATTRIBUTEENUM_Justify:
+ hAlgin = FDE_CSSTEXTALIGN_Justify;
+ break;
+ case XFA_ATTRIBUTEENUM_JustifyAll:
+ hAlgin = FDE_CSSTEXTALIGN_JustifyAll;
+ break;
+ }
+ pParaStyle->SetTextAlign(hAlgin);
+ FDE_CSSRECT rtMarginWidth;
+ rtMarginWidth.left.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginLeft());
+ rtMarginWidth.top.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceAbove());
+ rtMarginWidth.right.Set(FDE_CSSLENGTHUNIT_Point, para.GetMarginRight());
+ rtMarginWidth.bottom.Set(FDE_CSSLENGTHUNIT_Point, para.GetSpaceBelow());
+ pStyle->GetBoundaryStyles()->SetMarginWidth(rtMarginWidth);
+ }
+ if (font.IsExistInXML()) {
+ pFontStyle->SetColor(font.GetColor());
+ pFontStyle->SetFontStyle(font.IsItalic() ? FDE_CSSFONTSTYLE_Italic
+ : FDE_CSSFONTSTYLE_Normal);
+ pFontStyle->SetFontWeight(font.IsBold() ? FXFONT_FW_BOLD
+ : FXFONT_FW_NORMAL);
+ pParaStyle->SetNumberVerticalAlign(-font.GetBaselineShift());
+ fFontSize = font.GetFontSize();
+ FDE_CSSLENGTH letterSpacing;
+ letterSpacing.Set(FDE_CSSLENGTHUNIT_Point, font.GetLetterSpacing());
+ pParaStyle->SetLetterSpacing(letterSpacing);
+ FX_DWORD dwDecoration = 0;
+ if (font.GetLineThrough() > 0) {
+ dwDecoration |= FDE_CSSTEXTDECORATION_LineThrough;
+ }
+ if (font.GetUnderline() > 1) {
+ dwDecoration |= FDE_CSSTEXTDECORATION_Double;
+ } else if (font.GetUnderline() > 0) {
+ dwDecoration |= FDE_CSSTEXTDECORATION_Underline;
+ }
+ pParaStyle->SetTextDecoration(dwDecoration);
+ }
+ pParaStyle->SetLineHeight(fLineHeight);
+ pFontStyle->SetFontSize(fFontSize);
+ return pStyle;
+}
+IFDE_CSSComputedStyle* CXFA_TextParser::CreateStyle(
+ IFDE_CSSComputedStyle* pParentStyle) {
+ IFDE_CSSComputedStyle* pNewStyle =
+ m_pSelector->CreateComputedStyle(pParentStyle);
+ FXSYS_assert(pNewStyle != NULL);
+ if (pParentStyle) {
+ IFDE_CSSParagraphStyle* pParaStyle = pParentStyle->GetParagraphStyles();
+ FX_DWORD dwDecoration = pParaStyle->GetTextDecoration();
+ FX_FLOAT fBaseLine = 0;
+ if (pParaStyle->GetVerticalAlign() == FDE_CSSVERTICALALIGN_Number) {
+ fBaseLine = pParaStyle->GetNumberVerticalAlign();
+ }
+ pParaStyle = pNewStyle->GetParagraphStyles();
+ pParaStyle->SetTextDecoration(dwDecoration);
+ pParaStyle->SetNumberVerticalAlign(fBaseLine);
+ IFDE_CSSBoundaryStyle* pBoundarytyle = pParentStyle->GetBoundaryStyles();
+ const FDE_CSSRECT* pRect = pBoundarytyle->GetMarginWidth();
+ if (pRect != NULL) {
+ pBoundarytyle = pNewStyle->GetBoundaryStyles();
+ pBoundarytyle->SetMarginWidth(*pRect);
+ }
+ }
+ return pNewStyle;
+}
+IFDE_CSSComputedStyle* CXFA_TextParser::ComputeStyle(
+ IFDE_XMLNode* pXMLNode,
+ IFDE_CSSComputedStyle* pParentStyle) {
+ CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>(
+ m_mapXMLNodeToParseContext.GetValueAt(pXMLNode));
+ if (!pContext)
+ return nullptr;
+ pContext->m_pParentStyle = pParentStyle;
+ pParentStyle->AddRef();
+ CXFA_CSSTagProvider tagProvider;
+ ParseTagInfo(pXMLNode, tagProvider);
+ if (tagProvider.m_bContent)
+ return nullptr;
+ IFDE_CSSComputedStyle* pStyle = CreateStyle(pParentStyle);
+ IFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
+ pCSSAccel->OnEnterTag(&tagProvider);
+ m_pSelector->ComputeStyle(&tagProvider, pContext->GetDecls(),
+ pContext->CountDecls(), pStyle);
+ pCSSAccel->OnLeaveTag(&tagProvider);
+ return pStyle;
+}
+void CXFA_TextParser::DoParse(IFDE_XMLNode* pXMLContainer,
+ IXFA_TextProvider* pTextProvider) {
+ if (pXMLContainer == NULL || pTextProvider == NULL || m_pAllocator != NULL) {
+ return;
+ }
+ m_pAllocator =
+ FX_CreateAllocator(FX_ALLOCTYPE_Fixed, 32, sizeof(CXFA_CSSTagProvider));
+ InitCSSData(pTextProvider);
+ IFDE_CSSComputedStyle* pRootStyle = CreateRootStyle(pTextProvider);
+ ParseRichText(pXMLContainer, pRootStyle);
+ pRootStyle->Release();
+}
+void CXFA_TextParser::ParseRichText(IFDE_XMLNode* pXMLNode,
+ IFDE_CSSComputedStyle* pParentStyle) {
+ if (pXMLNode == NULL) {
+ return;
+ }
+ CXFA_CSSTagProvider tagProvider;
+ ParseTagInfo(pXMLNode, tagProvider);
+ if (!tagProvider.m_bTagAviliable) {
+ return;
+ }
+ IFDE_CSSComputedStyle* pNewStyle = NULL;
+ if ((tagProvider.GetTagName() != FX_WSTRC(L"body")) ||
+ (tagProvider.GetTagName() != FX_WSTRC(L"html"))) {
+ CXFA_TextParseContext* pTextContext =
+ FDE_NewWith(m_pAllocator) CXFA_TextParseContext;
+ FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_Inline;
+ if (!tagProvider.m_bContent) {
+ pNewStyle = CreateStyle(pParentStyle);
+ IFDE_CSSAccelerator* pCSSAccel = m_pSelector->InitAccelerator();
+ pCSSAccel->OnEnterTag(&tagProvider);
+ CFDE_CSSDeclarationArray DeclArray;
+ int32_t iMatchedDecls =
+ m_pSelector->MatchDeclarations(&tagProvider, DeclArray);
+ const IFDE_CSSDeclaration** ppMatchDecls =
+ (const IFDE_CSSDeclaration**)DeclArray.GetData();
+ m_pSelector->ComputeStyle(&tagProvider, ppMatchDecls, iMatchedDecls,
+ pNewStyle);
+ pCSSAccel->OnLeaveTag(&tagProvider);
+ if (iMatchedDecls > 0) {
+ pTextContext->SetDecls(ppMatchDecls, iMatchedDecls);
+ }
+ eDisplay = pNewStyle->GetPositionStyles()->GetDisplay();
+ }
+ pTextContext->SetDisplay(eDisplay);
+ m_mapXMLNodeToParseContext.SetAt(pXMLNode, pTextContext);
+ }
+ for (IFDE_XMLNode* pXMLChild =
+ pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild);
+ pXMLChild;
+ pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ ParseRichText(pXMLChild, pNewStyle);
+ }
+ if (pNewStyle != NULL) {
+ pNewStyle->Release();
+ }
+}
+void CXFA_TextParser::ParseTagInfo(IFDE_XMLNode* pXMLNode,
+ CXFA_CSSTagProvider& tagProvider) {
+ static const FX_DWORD s_XFATagName[] = {
+ 0x61, 0x62, 0x69, 0x70, 0x0001f714,
+ 0x00022a55, 0x000239bb, 0x00025881, 0x0bd37faa, 0x0bd37fb8,
+ 0xa73e3af2, 0xb182eaae, 0xdb8ac455,
+ };
+ CFX_WideString wsName;
+ if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
+ IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLNode;
+ pXMLElement->GetLocalTagName(wsName);
+ tagProvider.SetTagNameObj(wsName);
+ FX_DWORD dwHashCode =
+ FX_HashCode_String_GetW(wsName, wsName.GetLength(), TRUE);
+ static const int32_t s_iCount = sizeof(s_XFATagName) / sizeof(FX_DWORD);
+ CFX_DSPATemplate<FX_DWORD> lookup;
+ tagProvider.m_bTagAviliable =
+ lookup.Lookup(dwHashCode, s_XFATagName, s_iCount) > -1;
+ CFX_WideString wsValue;
+ pXMLElement->GetString(FX_WSTRC(L"style").GetPtr(), wsValue);
+ if (!wsValue.IsEmpty()) {
+ tagProvider.SetAttribute(FX_WSTRC(L"style"), wsValue);
+ }
+ } else if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
+ tagProvider.m_bTagAviliable = TRUE;
+ tagProvider.m_bContent = TRUE;
+ }
+}
+int32_t CXFA_TextParser::GetVAlgin(IXFA_TextProvider* pTextProvider) const {
+ int32_t iAlign = XFA_ATTRIBUTEENUM_Top;
+ CXFA_Para para = pTextProvider->GetParaNode();
+ if (para.IsExistInXML()) {
+ iAlign = para.GetVerticalAlign();
+ }
+ return iAlign;
+}
+FX_FLOAT CXFA_TextParser::GetTabInterval(IFDE_CSSComputedStyle* pStyle) const {
+ CFX_WideString wsValue;
+ if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"tab-interval"), wsValue)) {
+ CXFA_Measurement ms(wsValue);
+ return ms.ToUnit(XFA_UNIT_Pt);
+ }
+ return 36;
+}
+int32_t CXFA_TextParser::CountTabs(IFDE_CSSComputedStyle* pStyle) const {
+ CFX_WideString wsValue;
+ if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-count"), wsValue)) {
+ return wsValue.GetInteger();
+ }
+ return 0;
+}
+FX_BOOL CXFA_TextParser::IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const {
+ CFX_WideString wsValue;
+ if (pStyle && pStyle->GetCustomStyle(FX_WSTRC(L"xfa-spacerun"), wsValue)) {
+ wsValue.MakeLower();
+ return wsValue == FX_WSTRC(L"yes");
+ }
+ return FALSE;
+}
+IFX_Font* CXFA_TextParser::GetFont(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const {
+ CFX_WideStringC wsFamily = FX_WSTRC(L"Courier");
+ FX_DWORD dwStyle = 0;
+ CXFA_Font font = pTextProvider->GetFontNode();
+ if (font.IsExistInXML()) {
+ font.GetTypeface(wsFamily);
+ if (font.IsBold()) {
+ dwStyle |= FX_FONTSTYLE_Bold;
+ }
+ if (font.IsItalic()) {
+ dwStyle |= FX_FONTSTYLE_Italic;
+ }
+ }
+ if (pStyle) {
+ IFDE_CSSFontStyle* pFontStyle = pStyle->GetFontStyles();
+ int32_t iCount = pFontStyle->CountFontFamilies();
+ if (iCount > 0) {
+ wsFamily = pFontStyle->GetFontFamily(iCount - 1);
+ }
+ dwStyle = 0;
+ if (pFontStyle->GetFontWeight() > FXFONT_FW_NORMAL) {
+ dwStyle |= FX_FONTSTYLE_Bold;
+ }
+ if (pFontStyle->GetFontStyle() == FDE_CSSFONTSTYLE_Italic) {
+ dwStyle |= FX_FONTSTYLE_Italic;
+ }
+ }
+ CXFA_FFDoc* pDoc = pTextProvider->GetDocNode();
+ FXSYS_assert(pDoc != NULL);
+ CXFA_FontMgr* pFontMgr = pDoc->GetApp()->GetXFAFontMgr();
+ return pFontMgr->GetFont(pDoc, wsFamily, dwStyle);
+}
+FX_FLOAT CXFA_TextParser::GetFontSize(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const {
+ if (pStyle != NULL) {
+ return pStyle->GetFontStyles()->GetFontSize();
+ }
+ CXFA_Font font = pTextProvider->GetFontNode();
+ if (font.IsExistInXML()) {
+ return font.GetFontSize();
+ }
+ return 10;
+}
+int32_t CXFA_TextParser::GetHorScale(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ IFDE_XMLNode* pXMLNode) const {
+ if (pStyle) {
+ CFX_WideString wsValue;
+ if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-horizontal-scale"),
+ wsValue)) {
+ return wsValue.GetInteger();
+ }
+ while (pXMLNode) {
+ CXFA_TextParseContext* pContext = static_cast<CXFA_TextParseContext*>(
+ m_mapXMLNodeToParseContext.GetValueAt(pXMLNode));
+ if (pContext && pContext->m_pParentStyle &&
+ pContext->m_pParentStyle->GetCustomStyle(
+ FX_WSTRC(L"xfa-font-horizontal-scale"), wsValue)) {
+ return wsValue.GetInteger();
+ }
+ pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::Parent);
+ }
+ }
+ if (CXFA_Font font = pTextProvider->GetFontNode()) {
+ return static_cast<int32_t>(font.GetHorizontalScale());
+ }
+ return 100;
+}
+int32_t CXFA_TextParser::GetVerScale(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const {
+ if (pStyle != NULL) {
+ CFX_WideString wsValue;
+ if (pStyle->GetCustomStyle(FX_WSTRC(L"xfa-font-vertical-scale"), wsValue)) {
+ return wsValue.GetInteger();
+ }
+ }
+ if (CXFA_Font font = pTextProvider->GetFontNode()) {
+ return (int32_t)font.GetVerticalScale();
+ }
+ return 100;
+}
+void CXFA_TextParser::GetUnderline(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ int32_t& iUnderline,
+ int32_t& iPeriod) const {
+ iUnderline = 0;
+ iPeriod = XFA_ATTRIBUTEENUM_All;
+ if (pStyle) {
+ FX_DWORD dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration();
+ if (dwDecoration & FDE_CSSTEXTDECORATION_Double) {
+ iUnderline = 2;
+ } else if (dwDecoration & FDE_CSSTEXTDECORATION_Underline) {
+ iUnderline = 1;
+ }
+ CFX_WideString wsValue;
+ if (pStyle->GetCustomStyle(FX_WSTRC(L"underlinePeriod"), wsValue)) {
+ if (wsValue == FX_WSTRC(L"word")) {
+ iPeriod = XFA_ATTRIBUTEENUM_Word;
+ }
+ } else if (CXFA_Font font = pTextProvider->GetFontNode()) {
+ iPeriod = font.GetUnderlinePeriod();
+ }
+ } else {
+ CXFA_Font font = pTextProvider->GetFontNode();
+ if (font.IsExistInXML()) {
+ iUnderline = font.GetUnderline();
+ iPeriod = font.GetUnderlinePeriod();
+ }
+ }
+}
+void CXFA_TextParser::GetLinethrough(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ int32_t& iLinethrough) const {
+ if (pStyle) {
+ FX_DWORD dwDecoration = pStyle->GetParagraphStyles()->GetTextDecoration();
+ iLinethrough = (dwDecoration & FDE_CSSTEXTDECORATION_LineThrough) ? 1 : 0;
+ } else {
+ CXFA_Font font = pTextProvider->GetFontNode();
+ if (font.IsExistInXML()) {
+ iLinethrough = font.GetLineThrough();
+ }
+ }
+}
+FX_ARGB CXFA_TextParser::GetColor(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const {
+ if (pStyle != NULL) {
+ return pStyle->GetFontStyles()->GetColor();
+ }
+ if (CXFA_Font font = pTextProvider->GetFontNode()) {
+ return font.GetColor();
+ }
+ return 0xFF000000;
+}
+FX_FLOAT CXFA_TextParser::GetBaseline(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const {
+ if (pStyle != NULL) {
+ IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
+ if (pParaStyle->GetVerticalAlign() == FDE_CSSVERTICALALIGN_Number) {
+ return pParaStyle->GetNumberVerticalAlign();
+ }
+ } else if (CXFA_Font font = pTextProvider->GetFontNode()) {
+ return font.GetBaselineShift();
+ }
+ return 0;
+}
+FX_FLOAT CXFA_TextParser::GetLineHeight(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ FX_BOOL bFirst,
+ FX_FLOAT fVerScale) const {
+ FX_FLOAT fLineHeight = 0;
+ if (pStyle != NULL) {
+ fLineHeight = pStyle->GetParagraphStyles()->GetLineHeight();
+ } else if (CXFA_Para para = pTextProvider->GetParaNode()) {
+ fLineHeight = para.GetLineHeight();
+ }
+ if (bFirst) {
+ FX_FLOAT fFontSize = GetFontSize(pTextProvider, pStyle);
+ if (fLineHeight < 0.1f) {
+ fLineHeight = fFontSize;
+ } else {
+ fLineHeight = std::min(fLineHeight, fFontSize);
+ }
+ } else if (fLineHeight < 0.1f) {
+ fLineHeight = GetFontSize(pTextProvider, pStyle) * 1.2f;
+ }
+ fLineHeight *= fVerScale;
+ return fLineHeight;
+}
+FX_BOOL CXFA_TextParser::GetEmbbedObj(IXFA_TextProvider* pTextProvider,
+ IFDE_XMLNode* pXMLNode,
+ CFX_WideString& wsValue) {
+ wsValue.Empty();
+ if (pXMLNode == NULL) {
+ return FALSE;
+ }
+ FX_BOOL bRet = FALSE;
+ if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
+ IFDE_XMLElement* pElement = (IFDE_XMLElement*)pXMLNode;
+ CFX_WideString wsAttr;
+ pElement->GetString(FX_WSTRC(L"xfa:embed").GetPtr(), wsAttr);
+ if (wsAttr.IsEmpty()) {
+ return FALSE;
+ }
+ if (wsAttr.GetAt(0) == L'#') {
+ wsAttr.Delete(0);
+ }
+ CFX_WideString ws;
+ pElement->GetString(FX_WSTRC(L"xfa:embedType").GetPtr(), ws);
+ if (ws.IsEmpty()) {
+ ws = L"som";
+ } else {
+ ws.MakeLower();
+ }
+ FX_BOOL bURI = (ws == FX_WSTRC(L"uri"));
+ if (!bURI && ws != FX_WSTRC(L"som")) {
+ return FALSE;
+ }
+ ws.Empty();
+ pElement->GetString(FX_WSTRC(L"xfa:embedMode").GetPtr(), ws);
+ if (ws.IsEmpty()) {
+ ws = L"formatted";
+ } else {
+ ws.MakeLower();
+ }
+ FX_BOOL bRaw = (ws == FX_WSTRC(L"raw"));
+ if (!bRaw && ws != FX_WSTRC(L"formatted")) {
+ return FALSE;
+ }
+ bRet = pTextProvider->GetEmbbedObj(bURI, bRaw, wsAttr, wsValue);
+ }
+ return bRet;
+}
+CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
+ IFDE_XMLNode* pXMLNode) {
+ return (CXFA_TextParseContext*)m_mapXMLNodeToParseContext.GetValueAt(
+ pXMLNode);
+}
+enum XFA_TABSTOPSSTATUS {
+ XFA_TABSTOPSSTATUS_Error,
+ XFA_TABSTOPSSTATUS_EOS,
+ XFA_TABSTOPSSTATUS_None,
+ XFA_TABSTOPSSTATUS_Alignment,
+ XFA_TABSTOPSSTATUS_StartLeader,
+ XFA_TABSTOPSSTATUS_Leader,
+ XFA_TABSTOPSSTATUS_Location,
+};
+FX_BOOL CXFA_TextParser::GetTabstops(
+ IFDE_CSSComputedStyle* pStyle,
+ CXFA_TextTabstopsContext* pTabstopContext) {
+ if (pStyle == NULL || pTabstopContext == NULL) {
+ return FALSE;
+ }
+ CFX_WideString wsValue;
+ if (!pStyle->GetCustomStyle(FX_WSTRC(L"xfa-tab-stops"), wsValue) &&
+ !pStyle->GetCustomStyle(FX_WSTRC(L"tab-stops"), wsValue)) {
+ return FALSE;
+ }
+ int32_t iLength = wsValue.GetLength();
+ const FX_WCHAR* pTabStops = wsValue;
+ int32_t iCur = 0;
+ int32_t iLast = 0;
+ CFX_WideString wsAlign;
+ XFA_TABSTOPSSTATUS eStatus = XFA_TABSTOPSSTATUS_None;
+ FX_WCHAR ch;
+ while (iCur < iLength) {
+ ch = pTabStops[iCur];
+ switch (eStatus) {
+ case XFA_TABSTOPSSTATUS_None:
+ if (ch <= ' ') {
+ iCur++;
+ } else {
+ eStatus = XFA_TABSTOPSSTATUS_Alignment;
+ iLast = iCur;
+ }
+ break;
+ case XFA_TABSTOPSSTATUS_Alignment:
+ if (ch == ' ') {
+ wsAlign = CFX_WideStringC(pTabStops + iLast, iCur - iLast);
+ eStatus = XFA_TABSTOPSSTATUS_StartLeader;
+ iCur++;
+ while (iCur < iLength && pTabStops[iCur] <= ' ') {
+ iCur++;
+ }
+ iLast = iCur;
+ } else {
+ iCur++;
+ }
+ break;
+ case XFA_TABSTOPSSTATUS_StartLeader:
+ if (ch != 'l') {
+ eStatus = XFA_TABSTOPSSTATUS_Location;
+ } else {
+ int32_t iCount = 0;
+ while (iCur < iLength) {
+ ch = pTabStops[iCur];
+ iCur++;
+ if (ch == '(') {
+ iCount++;
+ } else if (ch == ')') {
+ iCount--;
+ if (iCount == 0) {
+ break;
+ }
+ }
+ }
+ while (iCur < iLength && pTabStops[iCur] <= ' ') {
+ iCur++;
+ }
+ iLast = iCur;
+ eStatus = XFA_TABSTOPSSTATUS_Location;
+ }
+ break;
+ case XFA_TABSTOPSSTATUS_Location:
+ if (ch == ' ') {
+ FX_DWORD dwHashCode =
+ FX_HashCode_String_GetW(wsAlign, wsAlign.GetLength(), TRUE);
+ CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
+ FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt);
+ pTabstopContext->Append(dwHashCode, fPos);
+ wsAlign.Empty();
+ eStatus = XFA_TABSTOPSSTATUS_None;
+ }
+ iCur++;
+ break;
+ default:
+ break;
+ }
+ }
+ if (!wsAlign.IsEmpty()) {
+ FX_DWORD dwHashCode =
+ FX_HashCode_String_GetW(wsAlign, wsAlign.GetLength(), TRUE);
+ CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
+ FX_FLOAT fPos = ms.ToUnit(XFA_UNIT_Pt);
+ pTabstopContext->Append(dwHashCode, fPos);
+ }
+ return TRUE;
+}
+CXFA_TextLayout::CXFA_TextLayout(IXFA_TextProvider* pTextProvider)
+ : m_bHasBlock(FALSE),
+ m_pTextProvider(pTextProvider),
+ m_pTextDataNode(nullptr),
+ m_bRichText(FALSE),
+ m_pAllocator(nullptr),
+ m_pBreak(nullptr),
+ m_pLoader(nullptr),
+ m_iLines(0),
+ m_fMaxWidth(0),
+ m_pTabstopContext(nullptr),
+ m_bBlockContinue(TRUE) {
+ FXSYS_assert(m_pTextProvider);
+}
+CXFA_TextLayout::~CXFA_TextLayout() {
+ m_textParser.Reset();
+ delete m_pLoader;
+ delete m_pTabstopContext;
+ Unload();
+}
+void CXFA_TextLayout::Unload() {
+ int32_t iCount = m_pieceLines.GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ CXFA_PieceLine* pLine = m_pieceLines.GetAt(i);
+ FDE_DeleteWith(CXFA_PieceLine, m_pAllocator, pLine);
+ }
+ m_pieceLines.RemoveAll();
+ if (m_pBreak != NULL) {
+ m_pBreak->Release();
+ m_pBreak = NULL;
+ }
+ if (m_pAllocator != NULL) {
+ m_pAllocator->Release();
+ m_pAllocator = NULL;
+ }
+}
+const CXFA_PieceLineArray* CXFA_TextLayout::GetPieceLines() {
+ return &m_pieceLines;
+}
+void CXFA_TextLayout::GetTextDataNode() {
+ if (m_pTextProvider == NULL) {
+ return;
+ }
+ CXFA_Node* pNode = m_pTextProvider->GetTextNode(m_bRichText);
+ if (pNode && m_bRichText) {
+ m_textParser.Reset();
+ }
+ m_pTextDataNode = pNode;
+}
+IFDE_XMLNode* CXFA_TextLayout::GetXMLContainerNode() {
+ IFDE_XMLNode* pXMLContainer = NULL;
+ if (m_bRichText) {
+ IFDE_XMLNode* pXMLRoot = m_pTextDataNode->GetXMLMappingNode();
+ if (!pXMLRoot) {
+ return pXMLContainer;
+ }
+ for (IFDE_XMLNode* pXMLChild =
+ pXMLRoot->GetNodeItem(IFDE_XMLNode::FirstChild);
+ pXMLChild;
+ pXMLChild = pXMLChild->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ if (pXMLChild->GetType() == FDE_XMLNODE_Element) {
+ IFDE_XMLElement* pXMLElement = (IFDE_XMLElement*)pXMLChild;
+ CFX_WideString wsTag;
+ pXMLElement->GetLocalTagName(wsTag);
+ if (wsTag.Equal(FX_WSTRC(L"body")) || wsTag.Equal(FX_WSTRC(L"html"))) {
+ pXMLContainer = pXMLChild;
+ break;
+ }
+ }
+ }
+ }
+ return pXMLContainer;
+}
+IFX_RTFBreak* CXFA_TextLayout::CreateBreak(FX_BOOL bDefault) {
+ FX_DWORD dwStyle = FX_RTFLAYOUTSTYLE_ExpandTab;
+ if (!bDefault) {
+ dwStyle |= FX_RTFLAYOUTSTYLE_Pagination;
+ }
+ IFX_RTFBreak* pBreak = IFX_RTFBreak::Create(0);
+ pBreak->SetLayoutStyles(dwStyle);
+ pBreak->SetLineBreakChar(L'\n');
+ pBreak->SetLineBreakTolerance(1);
+ pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL));
+ pBreak->SetFontSize(m_textParser.GetFontSize(m_pTextProvider, NULL));
+ return pBreak;
+}
+void CXFA_TextLayout::InitBreak(FX_FLOAT fLineWidth) {
+ CXFA_Font font = m_pTextProvider->GetFontNode();
+ CXFA_Para para = m_pTextProvider->GetParaNode();
+ FX_FLOAT fStart = 0;
+ FX_FLOAT fStartPos = 0;
+ if (para.IsExistInXML()) {
+ int32_t iAlign = FX_RTFLINEALIGNMENT_Left;
+ switch (para.GetHorizontalAlign()) {
+ case XFA_ATTRIBUTEENUM_Center:
+ iAlign = FX_RTFLINEALIGNMENT_Center;
+ break;
+ case XFA_ATTRIBUTEENUM_Right:
+ iAlign = FX_RTFLINEALIGNMENT_Right;
+ break;
+ case XFA_ATTRIBUTEENUM_Justify:
+ iAlign = FX_RTFLINEALIGNMENT_Justified;
+ break;
+ case XFA_ATTRIBUTEENUM_JustifyAll:
+ iAlign = FX_RTFLINEALIGNMENT_Distributed;
+ break;
+ }
+ m_pBreak->SetAlignment(iAlign);
+ fStart = para.GetMarginLeft();
+ if (m_pTextProvider->IsCheckButtonAndAutoWidth()) {
+ if (iAlign != FX_RTFLINEALIGNMENT_Left) {
+ fLineWidth -= para.GetMarginRight();
+ }
+ } else {
+ fLineWidth -= para.GetMarginRight();
+ }
+ if (fLineWidth < 0) {
+ fLineWidth = fStart;
+ }
+ fStartPos = fStart;
+ FX_FLOAT fIndent = para.GetTextIndent();
+ if (fIndent > 0) {
+ fStartPos += fIndent;
+ }
+ }
+ m_pBreak->SetLineBoundary(fStart, fLineWidth);
+ m_pBreak->SetLineStartPos(fStartPos);
+ if (font.IsExistInXML()) {
+ m_pBreak->SetHorizontalScale((int32_t)font.GetHorizontalScale());
+ m_pBreak->SetVerticalScale((int32_t)font.GetVerticalScale());
+ m_pBreak->SetCharSpace(font.GetLetterSpacing());
+ }
+ FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, NULL);
+ m_pBreak->SetFontSize(fFontSize);
+ m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, NULL));
+ m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f);
+}
+void CXFA_TextLayout::InitBreak(IFDE_CSSComputedStyle* pStyle,
+ FDE_CSSDISPLAY eDisplay,
+ FX_FLOAT fLineWidth,
+ IFDE_XMLNode* pXMLNode,
+ IFDE_CSSComputedStyle* pParentStyle) {
+ if (pStyle == NULL) {
+ InitBreak(fLineWidth);
+ return;
+ }
+ IFDE_CSSParagraphStyle* pParaStyle = pStyle->GetParagraphStyles();
+ if (eDisplay == FDE_CSSDISPLAY_Block || eDisplay == FDE_CSSDISPLAY_ListItem) {
+ int32_t iAlign = FX_RTFLINEALIGNMENT_Left;
+ switch (pParaStyle->GetTextAlign()) {
+ case FDE_CSSTEXTALIGN_Right:
+ iAlign = FX_RTFLINEALIGNMENT_Right;
+ break;
+ case FDE_CSSTEXTALIGN_Center:
+ iAlign = FX_RTFLINEALIGNMENT_Center;
+ break;
+ case FDE_CSSTEXTALIGN_Justify:
+ iAlign = FX_RTFLINEALIGNMENT_Justified;
+ break;
+ case FDE_CSSTEXTALIGN_JustifyAll:
+ iAlign = FX_RTFLINEALIGNMENT_Distributed;
+ break;
+ default:
+ break;
+ }
+ m_pBreak->SetAlignment(iAlign);
+ FX_FLOAT fStart = 0;
+ const FDE_CSSRECT* pRect = pStyle->GetBoundaryStyles()->GetMarginWidth();
+ const FDE_CSSRECT* pPaddingRect =
+ pStyle->GetBoundaryStyles()->GetPaddingWidth();
+ if (pRect != NULL) {
+ fStart = pRect->left.GetValue();
+ fLineWidth -= pRect->right.GetValue();
+ if (pPaddingRect != NULL) {
+ fStart += pPaddingRect->left.GetValue();
+ fLineWidth -= pPaddingRect->right.GetValue();
+ }
+ if (eDisplay == FDE_CSSDISPLAY_ListItem) {
+ const FDE_CSSRECT* pParRect =
+ pParentStyle->GetBoundaryStyles()->GetMarginWidth();
+ const FDE_CSSRECT* pParPaddingRect =
+ pParentStyle->GetBoundaryStyles()->GetPaddingWidth();
+ if (pParRect != NULL) {
+ fStart += pParRect->left.GetValue();
+ fLineWidth -= pParRect->right.GetValue();
+ if (pParPaddingRect != NULL) {
+ fStart += pParPaddingRect->left.GetValue();
+ fLineWidth -= pParPaddingRect->right.GetValue();
+ }
+ }
+ FDE_CSSRECT pNewRect;
+ pNewRect.left.Set(FDE_CSSLENGTHUNIT_Point, fStart);
+ pNewRect.right.Set(FDE_CSSLENGTHUNIT_Point, pRect->right.GetValue());
+ pNewRect.top.Set(FDE_CSSLENGTHUNIT_Point, pRect->top.GetValue());
+ pNewRect.bottom.Set(FDE_CSSLENGTHUNIT_Point, pRect->bottom.GetValue());
+ pStyle->GetBoundaryStyles()->SetMarginWidth(pNewRect);
+ }
+ }
+ m_pBreak->SetLineBoundary(fStart, fLineWidth);
+ FX_FLOAT fIndent = pParaStyle->GetTextIndent().GetValue();
+ if (fIndent > 0) {
+ fStart += fIndent;
+ }
+ m_pBreak->SetLineStartPos(fStart);
+ m_pBreak->SetTabWidth(m_textParser.GetTabInterval(pStyle));
+ if (m_pTabstopContext == NULL) {
+ m_pTabstopContext = new CXFA_TextTabstopsContext;
+ }
+ m_textParser.GetTabstops(pStyle, m_pTabstopContext);
+ for (int32_t i = 0; i < m_pTabstopContext->m_iTabCount; i++) {
+ XFA_TABSTOPS* pTab = m_pTabstopContext->m_tabstops.GetDataPtr(i);
+ m_pBreak->AddPositionedTab(pTab->fTabstops);
+ }
+ }
+ FX_FLOAT fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle);
+ m_pBreak->SetFontSize(fFontSize);
+ m_pBreak->SetLineBreakTolerance(fFontSize * 0.2f);
+ m_pBreak->SetFont(m_textParser.GetFont(m_pTextProvider, pStyle));
+ m_pBreak->SetHorizontalScale(
+ m_textParser.GetHorScale(m_pTextProvider, pStyle, pXMLNode));
+ m_pBreak->SetVerticalScale(m_textParser.GetVerScale(m_pTextProvider, pStyle));
+ m_pBreak->SetCharSpace(pParaStyle->GetLetterSpacing().GetValue());
+}
+int32_t CXFA_TextLayout::GetText(CFX_WideString& wsText) {
+ GetTextDataNode();
+ wsText.Empty();
+ if (m_bRichText) {
+ } else {
+ wsText = m_pTextDataNode->GetContent();
+ }
+ return wsText.GetLength();
+}
+FX_FLOAT CXFA_TextLayout::GetLayoutHeight() {
+ if (m_pLoader == NULL) {
+ return 0;
+ }
+ int32_t iCount = m_pLoader->m_lineHeights.GetSize();
+ if (iCount == 0 && m_pLoader->m_fWidth > 0) {
+ CFX_SizeF szMax, szDef;
+ szMax.Set(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
+ szDef.Set(0, 0);
+ m_pLoader->m_bSaveLineHeight = TRUE;
+ m_pLoader->m_fLastPos = 0;
+ CalcSize(szMax, szMax, szDef);
+ m_pLoader->m_bSaveLineHeight = FALSE;
+ return szDef.y;
+ }
+ FX_FLOAT fHeight = m_pLoader->m_fHeight;
+ if (fHeight < 0.1f) {
+ fHeight = 0;
+ for (int32_t i = 0; i < iCount; i++) {
+ fHeight += m_pLoader->m_lineHeights.ElementAt(i);
+ }
+ }
+ return fHeight;
+}
+FX_FLOAT CXFA_TextLayout::StartLayout(FX_FLOAT fWidth) {
+ if (m_pLoader == NULL) {
+ m_pLoader = new CXFA_LoaderContext;
+ }
+ if (fWidth < 0 || (m_pLoader->m_fWidth > -1 &&
+ FXSYS_fabs(fWidth - m_pLoader->m_fWidth) > 0)) {
+ m_pLoader->m_lineHeights.RemoveAll();
+ m_Blocks.RemoveAll();
+ Unload();
+ m_pLoader->m_fStartLineOffset = 0;
+ }
+ m_pLoader->m_fWidth = fWidth;
+ if (fWidth < 0) {
+ CFX_SizeF szMax, szDef;
+ szMax.Set(0, 0);
+ szDef.Set(0, 0);
+ m_pLoader->m_bSaveLineHeight = TRUE;
+ m_pLoader->m_fLastPos = 0;
+ CalcSize(szMax, szMax, szDef);
+ m_pLoader->m_bSaveLineHeight = FALSE;
+ fWidth = szDef.x;
+ }
+ return fWidth;
+}
+FX_BOOL CXFA_TextLayout::DoLayout(int32_t iBlockIndex,
+ FX_FLOAT& fCalcHeight,
+ FX_FLOAT fContentAreaHeight,
+ FX_FLOAT fTextHeight) {
+ if (m_pLoader == NULL) {
+ return FALSE;
+ }
+ int32_t iBlockCount = m_Blocks.GetSize();
+ FX_FLOAT fHeight = fTextHeight;
+ if (fHeight < 0) {
+ fHeight = GetLayoutHeight();
+ }
+ m_pLoader->m_fHeight = fHeight;
+ if (fContentAreaHeight < 0) {
+ return FALSE;
+ }
+ m_bHasBlock = TRUE;
+ if (iBlockCount == 0 && fHeight > 0) {
+ fHeight = fTextHeight - GetLayoutHeight();
+ if (fHeight > 0) {
+ int32_t iAlign = m_textParser.GetVAlgin(m_pTextProvider);
+ if (iAlign == XFA_ATTRIBUTEENUM_Middle) {
+ fHeight /= 2.0f;
+ } else if (iAlign != XFA_ATTRIBUTEENUM_Bottom) {
+ fHeight = 0;
+ }
+ m_pLoader->m_fStartLineOffset = fHeight;
+ }
+ }
+ FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset;
+ int32_t iLineIndex = 0;
+ if (iBlockCount > 1) {
+ if (iBlockCount >= (iBlockIndex + 1) * 2) {
+ iLineIndex = m_Blocks.ElementAt(iBlockIndex * 2);
+ } else {
+ iLineIndex = m_Blocks.ElementAt(iBlockCount - 1) +
+ m_Blocks.ElementAt(iBlockCount - 2);
+ }
+ if (m_pLoader->m_BlocksHeight.GetSize() > 0) {
+ for (int32_t i = 0; i < iBlockIndex; i++) {
+ fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1);
+ }
+ }
+ }
+ int32_t iCount = m_pLoader->m_lineHeights.GetSize();
+ int32_t i = 0;
+ for (i = iLineIndex; i < iCount; i++) {
+ FX_FLOAT fLineHeight = m_pLoader->m_lineHeights.ElementAt(i);
+ if ((i == iLineIndex) && (fLineHeight - fContentAreaHeight > 0.001)) {
+ fCalcHeight = 0;
+ return TRUE;
+ }
+ if (fLinePos + fLineHeight - fContentAreaHeight > 0.001) {
+ if (iBlockCount >= (iBlockIndex + 1) * 2) {
+ m_Blocks.SetAt(iBlockIndex * 2, iLineIndex);
+ m_Blocks.SetAt(iBlockIndex * 2 + 1, i - iLineIndex);
+ } else {
+ m_Blocks.Add(iLineIndex);
+ m_Blocks.Add(i - iLineIndex);
+ }
+ if (i == iLineIndex) {
+ if (fCalcHeight <= fLinePos) {
+ if (m_pLoader->m_BlocksHeight.GetSize() > iBlockIndex * 2 &&
+ (m_pLoader->m_BlocksHeight.GetAt(iBlockIndex * 2) ==
+ iBlockIndex)) {
+ m_pLoader->m_BlocksHeight.SetAt(iBlockIndex * 2 + 1, fCalcHeight);
+ } else {
+ m_pLoader->m_BlocksHeight.Add((FX_FLOAT)iBlockIndex);
+ m_pLoader->m_BlocksHeight.Add(fCalcHeight);
+ }
+ }
+ return TRUE;
+ }
+ fCalcHeight = fLinePos;
+ return TRUE;
+ }
+ fLinePos += fLineHeight;
+ }
+ return FALSE;
+}
+int32_t CXFA_TextLayout::CountBlocks() const {
+ int32_t iCount = m_Blocks.GetSize() / 2;
+ return iCount > 0 ? iCount : 1;
+}
+FX_BOOL CXFA_TextLayout::CalcSize(const CFX_SizeF& minSize,
+ const CFX_SizeF& maxSize,
+ CFX_SizeF& defaultSize) {
+ defaultSize.x = maxSize.x;
+ if (defaultSize.x < 1) {
+ defaultSize.x = 0xFFFF;
+ }
+ if (m_pBreak != NULL) {
+ m_pBreak->Release();
+ }
+ m_pBreak = CreateBreak(FALSE);
+ FX_FLOAT fLinePos = 0;
+ m_iLines = 0;
+ m_fMaxWidth = 0;
+ Loader(defaultSize, fLinePos, FALSE);
+ if (fLinePos < 0.1f) {
+ fLinePos = m_textParser.GetFontSize(m_pTextProvider, NULL);
+ }
+ if (m_pTabstopContext) {
+ delete m_pTabstopContext;
+ m_pTabstopContext = NULL;
+ }
+ defaultSize.Set(m_fMaxWidth, fLinePos);
+ return TRUE;
+}
+FX_BOOL CXFA_TextLayout::Layout(const CFX_SizeF& size, FX_FLOAT* fHeight) {
+ if (size.x < 1) {
+ return FALSE;
+ }
+ Unload();
+ m_pBreak = CreateBreak(TRUE);
+ if (m_pLoader != NULL) {
+ m_pLoader->m_iTotalLines = -1;
+ m_pLoader->m_iChar = 0;
+ }
+ m_iLines = 0;
+ FX_FLOAT fLinePos = 0;
+ Loader(size, fLinePos, TRUE);
+ UpdateAlign(size.y, fLinePos);
+ if (m_pTabstopContext) {
+ delete m_pTabstopContext;
+ m_pTabstopContext = NULL;
+ }
+ if (fHeight) {
+ *fHeight = fLinePos;
+ }
+ return TRUE;
+}
+FX_BOOL CXFA_TextLayout::Layout(int32_t iBlock) {
+ if (m_pLoader == NULL || iBlock < 0 || iBlock >= CountBlocks()) {
+ return FALSE;
+ }
+ if (m_pLoader->m_fWidth < 1) {
+ return FALSE;
+ }
+ m_pLoader->m_iTotalLines = -1;
+ m_iLines = 0;
+ FX_FLOAT fLinePos = 0;
+ CXFA_Node* pNode = NULL;
+ CFX_SizeF szText;
+ szText.Set(m_pLoader->m_fWidth, m_pLoader->m_fHeight);
+ int32_t iCount = m_Blocks.GetSize();
+ int32_t iBlocksHeightCount = m_pLoader->m_BlocksHeight.GetSize();
+ iBlocksHeightCount /= 2;
+ if (iBlock < iBlocksHeightCount) {
+ return TRUE;
+ }
+ if (iBlock == iBlocksHeightCount) {
+ Unload();
+ m_pBreak = CreateBreak(TRUE);
+ fLinePos = m_pLoader->m_fStartLineOffset;
+ for (int32_t i = 0; i < iBlocksHeightCount; i++) {
+ fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1);
+ }
+ m_pLoader->m_iChar = 0;
+ if (iCount > 1) {
+ m_pLoader->m_iTotalLines = m_Blocks.ElementAt(iBlock * 2 + 1);
+ }
+ Loader(szText, fLinePos, TRUE);
+ if (iCount == 0 && m_pLoader->m_fStartLineOffset < 0.1f) {
+ UpdateAlign(szText.y, fLinePos);
+ }
+ } else if (m_pTextDataNode != NULL) {
+ iBlock *= 2;
+ if (iBlock < iCount - 2) {
+ m_pLoader->m_iTotalLines = m_Blocks.ElementAt(iBlock + 1);
+ }
+ m_pBreak->Reset();
+ if (m_bRichText) {
+ IFDE_XMLNode* pContainerNode = GetXMLContainerNode();
+ if (!pContainerNode) {
+ return TRUE;
+ }
+ IFDE_XMLNode* pXMLNode = m_pLoader->m_pXMLNode;
+ if (pXMLNode == NULL) {
+ return TRUE;
+ }
+ IFDE_XMLNode* pSaveXMLNode = m_pLoader->m_pXMLNode;
+ for (; pXMLNode;
+ pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ FX_BOOL bFlag = LoadRichText(pXMLNode, szText, fLinePos,
+ m_pLoader->m_pParentStyle, TRUE);
+ if (!bFlag) {
+ break;
+ }
+ }
+ while (pXMLNode == NULL) {
+ pXMLNode = pSaveXMLNode->GetNodeItem(IFDE_XMLNode::Parent);
+ if (pXMLNode == pContainerNode) {
+ break;
+ }
+ FX_BOOL bFlag =
+ LoadRichText(pXMLNode, szText, fLinePos, m_pLoader->m_pParentStyle,
+ TRUE, NULL, FALSE);
+ if (!bFlag) {
+ break;
+ }
+ pSaveXMLNode = pXMLNode;
+ pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling);
+ if (!pXMLNode) {
+ continue;
+ }
+ for (; pXMLNode;
+ pXMLNode = pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ FX_BOOL bFlag = LoadRichText(pXMLNode, szText, fLinePos,
+ m_pLoader->m_pParentStyle, TRUE);
+ if (!bFlag) {
+ break;
+ }
+ }
+ }
+ } else {
+ pNode = m_pLoader->m_pNode;
+ if (pNode == NULL) {
+ return TRUE;
+ }
+ LoadText(pNode, szText, fLinePos, TRUE);
+ }
+ }
+ if (iBlock == iCount) {
+ if (m_pTabstopContext != NULL) {
+ delete m_pTabstopContext;
+ m_pTabstopContext = NULL;
+ }
+ if (m_pLoader != NULL) {
+ delete m_pLoader;
+ m_pLoader = NULL;
+ }
+ }
+ return TRUE;
+}
+void CXFA_TextLayout::ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex) {
+ if (!m_pLoader) {
+ return;
+ }
+ int32_t iCountHeight = m_pLoader->m_lineHeights.GetSize();
+ if (iCountHeight == 0) {
+ return;
+ }
+ FX_BOOL bEndItem = TRUE;
+ int32_t iBlockCount = m_Blocks.GetSize();
+ FX_FLOAT fLinePos = m_pLoader->m_fStartLineOffset;
+ int32_t iLineIndex = 0;
+ if (iBlockIndex > 0) {
+ int32_t iBlockHeightCount = m_pLoader->m_BlocksHeight.GetSize();
+ iBlockHeightCount /= 2;
+ if (iBlockHeightCount >= iBlockIndex) {
+ for (int32_t i = 0; i < iBlockIndex; i++) {
+ fLinePos -= m_pLoader->m_BlocksHeight.ElementAt(i * 2 + 1);
+ }
+ } else {
+ fLinePos = 0;
+ }
+ iLineIndex = m_Blocks.ElementAt(iBlockCount - 1) +
+ m_Blocks.ElementAt(iBlockCount - 2);
+ }
+ int32_t i = 0;
+ for (i = iLineIndex; i < iCountHeight; i++) {
+ FX_FLOAT fLineHeight = m_pLoader->m_lineHeights.ElementAt(i);
+ if (fLinePos + fLineHeight - rtText.height > 0.001) {
+ m_Blocks.Add(iLineIndex);
+ m_Blocks.Add(i - iLineIndex);
+ bEndItem = FALSE;
+ break;
+ }
+ fLinePos += fLineHeight;
+ }
+ if (iCountHeight > 0 && (i - iLineIndex) > 0 && bEndItem) {
+ m_Blocks.Add(iLineIndex);
+ m_Blocks.Add(i - iLineIndex);
+ }
+}
+FX_BOOL CXFA_TextLayout::DrawString(CFX_RenderDevice* pFxDevice,
+ const CFX_Matrix& tmDoc2Device,
+ const CFX_RectF& rtClip,
+ int32_t iBlock) {
+ IFDE_RenderDevice* pDevice = IFDE_RenderDevice::Create(pFxDevice);
+ if (pDevice == NULL) {
+ return FALSE;
+ }
+ FDE_HDEVICESTATE state = pDevice->SaveState();
+ pDevice->SetClipRect(rtClip);
+ IFDE_SolidBrush* pSolidBrush =
+ (IFDE_SolidBrush*)IFDE_Brush::Create(FDE_BRUSHTYPE_Solid);
+ IFDE_Pen* pPen = IFDE_Pen::Create();
+ FXSYS_assert(pDevice != NULL && pSolidBrush != NULL && pPen != NULL);
+ if (m_pieceLines.GetSize() == 0) {
+ int32_t iBlockCount = CountBlocks();
+ for (int32_t i = 0; i < iBlockCount; i++) {
+ Layout(i);
+ }
+ }
+ FXTEXT_CHARPOS* pCharPos = NULL;
+ int32_t iCharCount = 0;
+ int32_t iLineStart = 0;
+ int32_t iPieceLines = m_pieceLines.GetSize();
+ int32_t iCount = m_Blocks.GetSize();
+ if (iCount > 0) {
+ iBlock *= 2;
+ if (iBlock < iCount) {
+ iLineStart = m_Blocks.ElementAt(iBlock);
+ iPieceLines = m_Blocks.ElementAt(iBlock + 1);
+ } else {
+ iPieceLines = 0;
+ }
+ }
+ for (int32_t i = 0; i < iPieceLines; i++) {
+ if (i + iLineStart >= m_pieceLines.GetSize()) {
+ break;
+ }
+ CXFA_PieceLine* pPieceLine = m_pieceLines.GetAt(i + iLineStart);
+ int32_t iPieces = pPieceLine->m_textPieces.GetSize();
+ int32_t j = 0;
+ for (j = 0; j < iPieces; j++) {
+ XFA_LPCTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(j);
+ int32_t iChars = pPiece->iChars;
+ if (iCharCount < iChars) {
+ FX_Free(pCharPos);
+ pCharPos = FX_Alloc(FXTEXT_CHARPOS, iChars);
+ iCharCount = iChars;
+ }
+ FXSYS_memset(pCharPos, 0, iCharCount * sizeof(FXTEXT_CHARPOS));
+ RenderString(pDevice, pSolidBrush, pPieceLine, j, pCharPos, tmDoc2Device);
+ }
+ for (j = 0; j < iPieces; j++) {
+ RenderPath(pDevice, pPen, pPieceLine, j, pCharPos, tmDoc2Device);
+ }
+ }
+ pDevice->RestoreState(state);
+ FX_Free(pCharPos);
+ pSolidBrush->Release();
+ pPen->Release();
+ pDevice->Release();
+ return iPieceLines;
+}
+void CXFA_TextLayout::UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom) {
+ fHeight -= fBottom;
+ if (fHeight < 0.1f) {
+ return;
+ }
+ switch (m_textParser.GetVAlgin(m_pTextProvider)) {
+ case XFA_ATTRIBUTEENUM_Middle:
+ fHeight /= 2.0f;
+ break;
+ case XFA_ATTRIBUTEENUM_Bottom:
+ break;
+ default:
+ return;
+ }
+ int32_t iCount = m_pieceLines.GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ CXFA_PieceLine* pPieceLine = m_pieceLines.GetAt(i);
+ int32_t iPieces = pPieceLine->m_textPieces.GetSize();
+ for (int32_t j = 0; j < iPieces; j++) {
+ XFA_LPTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(j);
+ CFX_RectF& rect = pPiece->rtPiece;
+ rect.top += fHeight;
+ }
+ }
+}
+FX_BOOL CXFA_TextLayout::Loader(const CFX_SizeF& szText,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces) {
+ if (m_pAllocator == NULL) {
+ m_pAllocator = FX_CreateAllocator(FX_ALLOCTYPE_Static, 256, 0);
+ }
+ GetTextDataNode();
+ if (m_pTextDataNode == NULL) {
+ return TRUE;
+ }
+ if (m_bRichText) {
+ IFDE_XMLNode* pXMLContainer = GetXMLContainerNode();
+ if (pXMLContainer) {
+ if (!m_textParser.IsParsed()) {
+ m_textParser.DoParse(pXMLContainer, m_pTextProvider);
+ }
+ IFDE_CSSComputedStyle* pRootStyle =
+ m_textParser.CreateRootStyle(m_pTextProvider);
+ LoadRichText(pXMLContainer, szText, fLinePos, pRootStyle, bSavePieces);
+ pRootStyle->Release();
+ }
+ } else {
+ LoadText(m_pTextDataNode, szText, fLinePos, bSavePieces);
+ }
+ return TRUE;
+}
+void CXFA_TextLayout::LoadText(CXFA_Node* pNode,
+ const CFX_SizeF& szText,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces) {
+ InitBreak(szText.x);
+ CXFA_Para para = m_pTextProvider->GetParaNode();
+ FX_FLOAT fSpaceAbove = 0;
+ if (para.IsExistInXML()) {
+ fSpaceAbove = para.GetSpaceAbove();
+ if (fSpaceAbove < 0.1f) {
+ fSpaceAbove = 0;
+ }
+ int32_t verAlign = para.GetVerticalAlign();
+ switch (verAlign) {
+ case XFA_ATTRIBUTEENUM_Top:
+ case XFA_ATTRIBUTEENUM_Middle:
+ case XFA_ATTRIBUTEENUM_Bottom: {
+ fLinePos += fSpaceAbove;
+ break;
+ }
+ }
+ }
+ CFX_WideString wsText = pNode->GetContent();
+ wsText.TrimRight(L" ");
+ FX_BOOL bRet = AppendChar(wsText, fLinePos, fSpaceAbove, bSavePieces);
+ if (bRet && m_pLoader != NULL) {
+ m_pLoader->m_pNode = pNode;
+ } else {
+ EndBreak(FX_RTFBREAK_ParagraphBreak, fLinePos, bSavePieces);
+ }
+}
+FX_BOOL CXFA_TextLayout::LoadRichText(IFDE_XMLNode* pXMLNode,
+ const CFX_SizeF& szText,
+ FX_FLOAT& fLinePos,
+ IFDE_CSSComputedStyle* pParentStyle,
+ FX_BOOL bSavePieces,
+ CXFA_LinkUserData* pLinkData,
+ FX_BOOL bEndBreak,
+ FX_BOOL bIsOl,
+ int32_t iLiCount) {
+ if (pXMLNode == NULL) {
+ return FALSE;
+ }
+ CXFA_TextParseContext* pContext =
+ m_textParser.GetParseContextFromMap(pXMLNode);
+ FDE_CSSDISPLAY eDisplay = FDE_CSSDISPLAY_None;
+ FX_BOOL bContentNode = FALSE;
+ FX_FLOAT fSpaceBelow = 0;
+ IFDE_CSSComputedStyle* pStyle = NULL;
+ CFX_WideString wsName;
+ if (bEndBreak) {
+ FX_BOOL bCurOl = FALSE;
+ FX_BOOL bCurLi = FALSE;
+ IFDE_XMLElement* pElement = NULL;
+ if (pContext != NULL) {
+ if (m_bBlockContinue ||
+ (m_pLoader && pXMLNode == m_pLoader->m_pXMLNode)) {
+ m_bBlockContinue = TRUE;
+ }
+ if (pXMLNode->GetType() == FDE_XMLNODE_Text) {
+ bContentNode = TRUE;
+ } else if (pXMLNode->GetType() == FDE_XMLNODE_Element) {
+ pElement = (IFDE_XMLElement*)pXMLNode;
+ pElement->GetLocalTagName(wsName);
+ }
+ if (wsName == FX_WSTRC(L"ol")) {
+ bIsOl = TRUE;
+ bCurOl = TRUE;
+ }
+ if (m_bBlockContinue || bContentNode == FALSE) {
+ eDisplay = pContext->GetDisplay();
+ if (eDisplay != FDE_CSSDISPLAY_Block &&
+ eDisplay != FDE_CSSDISPLAY_Inline &&
+ eDisplay != FDE_CSSDISPLAY_ListItem) {
+ return TRUE;
+ }
+ pStyle = m_textParser.ComputeStyle(pXMLNode, pParentStyle);
+ InitBreak(bContentNode ? pParentStyle : pStyle, eDisplay, szText.x,
+ pXMLNode, pParentStyle);
+ if ((eDisplay == FDE_CSSDISPLAY_Block ||
+ eDisplay == FDE_CSSDISPLAY_ListItem) &&
+ (pStyle != NULL) &&
+ (wsName.IsEmpty() ||
+ (wsName != FX_WSTRC(L"body") && wsName != FX_WSTRC(L"html") &&
+ wsName != FX_WSTRC(L"ol") && wsName != FX_WSTRC(L"ul")))) {
+ const FDE_CSSRECT* pRect =
+ pStyle->GetBoundaryStyles()->GetMarginWidth();
+ if (pRect) {
+ fLinePos += pRect->top.GetValue();
+ fSpaceBelow = pRect->bottom.GetValue();
+ }
+ }
+ if (wsName == FX_WSTRC(L"a")) {
+ CFX_WideString wsLinkContent;
+ FXSYS_assert(pElement);
+ pElement->GetString(FX_WSTRC(L"href").GetPtr(), wsLinkContent);
+ if (!wsLinkContent.IsEmpty()) {
+ pLinkData = FDE_NewWith(m_pAllocator) CXFA_LinkUserData(
+ m_pAllocator,
+ wsLinkContent.GetBuffer(wsLinkContent.GetLength()));
+ wsLinkContent.ReleaseBuffer(wsLinkContent.GetLength());
+ }
+ }
+ int32_t iTabCount =
+ m_textParser.CountTabs(bContentNode ? pParentStyle : pStyle);
+ FX_BOOL bSpaceRun =
+ m_textParser.IsSpaceRun(bContentNode ? pParentStyle : pStyle);
+ CFX_WideString wsText;
+ if (bContentNode && iTabCount == 0) {
+ ((IFDE_XMLText*)pXMLNode)->GetText(wsText);
+ } else if (wsName == FX_WSTRC(L"br")) {
+ wsText = L'\n';
+ } else if (wsName == FX_WSTRC(L"li")) {
+ bCurLi = TRUE;
+ if (bIsOl) {
+ wsText.Format(L"%d. ", iLiCount);
+ } else {
+ wsText = 0x00B7 + FX_WSTRC(L" ");
+ }
+ } else if (!bContentNode) {
+ if (iTabCount > 0)
+ while (iTabCount-- > 0) {
+ wsText += L'\t';
+ }
+ else {
+ m_textParser.GetEmbbedObj(m_pTextProvider, pXMLNode, wsText);
+ }
+ }
+ int32_t iLength = wsText.GetLength();
+ if (iLength > 0 && bContentNode && !bSpaceRun) {
+ ProcessText(wsText);
+ }
+ if (m_pLoader) {
+ if (wsText.GetLength() > 0 &&
+ (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) {
+ wsText.TrimLeft(0x20);
+ }
+ if (FDE_CSSDISPLAY_Block == eDisplay) {
+ m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
+ } else if (FDE_CSSDISPLAY_Inline == eDisplay &&
+ (m_pLoader->m_dwFlags & XFA_LOADERCNTXTFLG_FILTERSPACE)) {
+ m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
+ } else if (wsText.GetLength() > 0 &&
+ (0x20 == wsText.GetAt(wsText.GetLength() - 1))) {
+ m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
+ } else if (wsText.GetLength() == 0)
+ ;
+ else {
+ m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
+ }
+ }
+ if (wsText.GetLength() > 0) {
+ if (m_pLoader == NULL || m_pLoader->m_iChar == 0) {
+ if (pLinkData) {
+ pLinkData->AddRef();
+ }
+ CXFA_TextUserData* pUserData = FDE_NewWith(m_pAllocator)
+ CXFA_TextUserData(m_pAllocator,
+ bContentNode ? pParentStyle : pStyle,
+ pLinkData);
+ m_pBreak->SetUserData(pUserData);
+ }
+ if (AppendChar(wsText, fLinePos, 0, bSavePieces)) {
+ if (m_pLoader) {
+ m_pLoader->m_dwFlags &= ~XFA_LOADERCNTXTFLG_FILTERSPACE;
+ }
+ if (IsEnd(bSavePieces)) {
+ if (m_pLoader && m_pLoader->m_iTotalLines > -1) {
+ m_pLoader->m_pXMLNode = pXMLNode;
+ m_pLoader->m_pParentStyle = pParentStyle;
+ }
+ if (pStyle != NULL) {
+ pStyle->Release();
+ }
+ return FALSE;
+ }
+ return TRUE;
+ }
+ }
+ }
+ }
+ FX_BOOL ret = TRUE;
+ for (IFDE_XMLNode* pChildNode =
+ pXMLNode->GetNodeItem(IFDE_XMLNode::FirstChild);
+ pChildNode;
+ pChildNode = pChildNode->GetNodeItem(IFDE_XMLNode::NextSibling)) {
+ if (bCurOl) {
+ iLiCount++;
+ }
+ ret = LoadRichText(pChildNode, szText, fLinePos,
+ pContext ? pStyle : pParentStyle, bSavePieces,
+ pLinkData, TRUE, bIsOl, iLiCount);
+ if (ret == FALSE) {
+ return FALSE;
+ }
+ }
+ if (m_pLoader) {
+ if (FDE_CSSDISPLAY_Block == eDisplay) {
+ m_pLoader->m_dwFlags |= XFA_LOADERCNTXTFLG_FILTERSPACE;
+ }
+ }
+ if (bCurLi) {
+ EndBreak(FX_RTFBREAK_LineBreak, fLinePos, bSavePieces);
+ }
+ } else {
+ if (pContext != NULL) {
+ eDisplay = pContext->GetDisplay();
+ }
+ }
+ if (m_bBlockContinue) {
+ if (pContext != NULL && !bContentNode) {
+ FX_DWORD dwStatus = (eDisplay == FDE_CSSDISPLAY_Block)
+ ? FX_RTFBREAK_ParagraphBreak
+ : FX_RTFBREAK_PieceBreak;
+ EndBreak(dwStatus, fLinePos, bSavePieces);
+ if (eDisplay == FDE_CSSDISPLAY_Block) {
+ fLinePos += fSpaceBelow;
+ if (m_pTabstopContext) {
+ m_pTabstopContext->RemoveAll();
+ }
+ }
+ if (wsName == FX_WSTRC(L"a")) {
+ if (pLinkData) {
+ pLinkData->Release();
+ pLinkData = nullptr;
+ }
+ }
+ if (IsEnd(bSavePieces)) {
+ if (pStyle) {
+ pStyle->Release();
+ }
+ if (m_pLoader && m_pLoader->m_iTotalLines > -1) {
+ m_pLoader->m_pXMLNode =
+ pXMLNode->GetNodeItem(IFDE_XMLNode::NextSibling);
+ m_pLoader->m_pParentStyle = pParentStyle;
+ }
+ return FALSE;
+ }
+ }
+ }
+ if (pStyle != NULL) {
+ pStyle->Release();
+ }
+ return TRUE;
+}
+FX_BOOL CXFA_TextLayout::AppendChar(const CFX_WideString& wsText,
+ FX_FLOAT& fLinePos,
+ FX_FLOAT fSpaceAbove,
+ FX_BOOL bSavePieces) {
+ FX_DWORD dwStatus = 0;
+ int32_t iChar = 0;
+ if (m_pLoader) {
+ iChar = m_pLoader->m_iChar;
+ }
+ int32_t iLength = wsText.GetLength();
+ for (int32_t i = iChar; i < iLength; i++) {
+ FX_WCHAR wch = wsText.GetAt(i);
+ if (wch == 0xA0) {
+ wch = 0x20;
+ }
+ if ((dwStatus = m_pBreak->AppendChar(wch)) > FX_RTFBREAK_PieceBreak) {
+ AppendTextLine(dwStatus, fLinePos, bSavePieces);
+ if (IsEnd(bSavePieces)) {
+ if (m_pLoader != NULL) {
+ m_pLoader->m_iChar = i;
+ }
+ return TRUE;
+ }
+ if (dwStatus == FX_RTFBREAK_ParagraphBreak && m_bRichText) {
+ fLinePos += fSpaceAbove;
+ }
+ }
+ }
+ if (m_pLoader) {
+ m_pLoader->m_iChar = 0;
+ }
+ return FALSE;
+}
+FX_BOOL CXFA_TextLayout::IsEnd(FX_BOOL bSavePieces) {
+ if (!bSavePieces) {
+ return FALSE;
+ }
+ if (m_pLoader && m_pLoader->m_iTotalLines > 0) {
+ return m_iLines >= m_pLoader->m_iTotalLines;
+ }
+ return FALSE;
+}
+void CXFA_TextLayout::ProcessText(CFX_WideString& wsText) {
+ int32_t iLen = wsText.GetLength();
+ if (iLen == 0) {
+ return;
+ }
+ FX_WCHAR* psz = wsText.GetBuffer(iLen);
+ int32_t iTrimLeft = 0;
+ FX_WCHAR wch = 0, wPrev = 0;
+ for (int32_t i = 0; i < iLen; i++) {
+ wch = psz[i];
+ if (wch < 0x20) {
+ wch = 0x20;
+ }
+ if (wch == 0x20 && wPrev == 0x20) {
+ continue;
+ }
+ wPrev = wch;
+ psz[iTrimLeft++] = wch;
+ }
+ wsText.ReleaseBuffer(iLen);
+ wsText = wsText.Left(iTrimLeft);
+}
+void CXFA_TextLayout::EndBreak(FX_DWORD dwStatus,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces) {
+ dwStatus = m_pBreak->EndBreak(dwStatus);
+ if (dwStatus > FX_RTFBREAK_PieceBreak) {
+ AppendTextLine(dwStatus, fLinePos, bSavePieces, TRUE);
+ }
+}
+void CXFA_TextLayout::DoTabstops(IFDE_CSSComputedStyle* pStyle,
+ CXFA_PieceLine* pPieceLine) {
+ if (m_pTabstopContext == NULL || m_pTabstopContext->m_iTabCount == 0) {
+ return;
+ }
+ if (pStyle == NULL || pPieceLine == NULL) {
+ return;
+ }
+ int32_t iPieces = pPieceLine->m_textPieces.GetSize();
+ if (iPieces == 0) {
+ return;
+ }
+ XFA_LPTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(iPieces - 1);
+ int32_t& iTabstopsIndex = m_pTabstopContext->m_iTabIndex;
+ int32_t iCount = m_textParser.CountTabs(pStyle);
+ if (iTabstopsIndex > m_pTabstopContext->m_iTabCount - 1) {
+ return;
+ }
+ if (iCount > 0) {
+ iTabstopsIndex++;
+ m_pTabstopContext->m_bTabstops = TRUE;
+ FX_FLOAT fRight = 0;
+ if (iPieces > 1) {
+ XFA_LPTEXTPIECE p = pPieceLine->m_textPieces.GetAt(iPieces - 2);
+ fRight = p->rtPiece.right();
+ }
+ m_pTabstopContext->m_fTabWidth =
+ pPiece->rtPiece.width + pPiece->rtPiece.left - fRight;
+ } else if (iTabstopsIndex > -1) {
+ FX_FLOAT fLeft = 0;
+ if (m_pTabstopContext->m_bTabstops) {
+ XFA_TABSTOPS* pTabstops =
+ m_pTabstopContext->m_tabstops.GetDataPtr(iTabstopsIndex);
+ FX_DWORD dwAlgin = pTabstops->dwAlign;
+ if (dwAlgin == FX_HashCode_String_GetW(L"center", 6)) {
+ fLeft = pPiece->rtPiece.width / 2.0f;
+ } else if (dwAlgin == FX_HashCode_String_GetW(L"right", 5) ||
+ dwAlgin == FX_HashCode_String_GetW(L"before", 6)) {
+ fLeft = pPiece->rtPiece.width;
+ } else if (dwAlgin == FX_HashCode_String_GetW(L"decimal", 7)) {
+ int32_t iChars = pPiece->iChars;
+ for (int32_t i = 0; i < iChars; i++) {
+ if (pPiece->pszText[i] == L'.') {
+ break;
+ }
+ fLeft += pPiece->pWidths[i] / 20000.0f;
+ }
+ }
+ m_pTabstopContext->m_fLeft =
+ std::min(fLeft, m_pTabstopContext->m_fTabWidth);
+ m_pTabstopContext->m_bTabstops = FALSE;
+ m_pTabstopContext->m_fTabWidth = 0;
+ }
+ pPiece->rtPiece.left -= m_pTabstopContext->m_fLeft;
+ }
+}
+void CXFA_TextLayout::AppendTextLine(FX_DWORD dwStatus,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces,
+ FX_BOOL bEndBreak) {
+ int32_t iPieces = m_pBreak->CountBreakPieces();
+ if (iPieces < 1) {
+ return;
+ }
+ IFDE_CSSComputedStyle* pStyle = NULL;
+ if (bSavePieces) {
+ CXFA_PieceLine* pPieceLine = FDE_NewWith(m_pAllocator) CXFA_PieceLine;
+ m_pieceLines.Add(pPieceLine);
+ if (m_pTabstopContext) {
+ m_pTabstopContext->Reset();
+ }
+ FX_FLOAT fLineStep = 0, fBaseLine = 0;
+ int32_t i = 0;
+ for (i = 0; i < iPieces; i++) {
+ const CFX_RTFPiece* pPiece = m_pBreak->GetBreakPiece(i);
+ CXFA_TextUserData* pUserData = (CXFA_TextUserData*)pPiece->m_pUserData;
+ if (pUserData != NULL) {
+ pStyle = pUserData->m_pStyle;
+ }
+ FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f;
+ XFA_LPTEXTPIECE pTP =
+ (XFA_LPTEXTPIECE)m_pAllocator->Alloc(sizeof(XFA_TEXTPIECE));
+ pTP->pszText =
+ (FX_WCHAR*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(FX_WCHAR));
+ pTP->pWidths =
+ (int32_t*)m_pAllocator->Alloc(pPiece->m_iChars * sizeof(int32_t));
+ pTP->iChars = pPiece->m_iChars;
+ pPiece->GetString(pTP->pszText);
+ pPiece->GetWidths(pTP->pWidths);
+ pTP->iBidiLevel = pPiece->m_iBidiLevel;
+ pTP->iHorScale = pPiece->m_iHorizontalScale;
+ pTP->iVerScale = pPiece->m_iVerticalScale;
+ m_textParser.GetUnderline(m_pTextProvider, pStyle, pTP->iUnderline,
+ pTP->iPeriod);
+ m_textParser.GetLinethrough(m_pTextProvider, pStyle, pTP->iLineThrough);
+ pTP->dwColor = m_textParser.GetColor(m_pTextProvider, pStyle);
+ pTP->pFont = m_textParser.GetFont(m_pTextProvider, pStyle);
+ pTP->fFontSize = m_textParser.GetFontSize(m_pTextProvider, pStyle);
+ pTP->rtPiece.left = pPiece->m_iStartPos / 20000.0f;
+ pTP->rtPiece.width = pPiece->m_iWidth / 20000.0f;
+ pTP->rtPiece.height = (FX_FLOAT)pPiece->m_iFontSize * fVerScale / 20.0f;
+ FX_FLOAT fBaseLineTemp =
+ m_textParser.GetBaseline(m_pTextProvider, pStyle);
+ pTP->rtPiece.top = fBaseLineTemp;
+ pPieceLine->m_textPieces.Add(pTP);
+ FX_FLOAT fLineHeight = m_textParser.GetLineHeight(
+ m_pTextProvider, pStyle, m_iLines == 0, fVerScale);
+ if (fBaseLineTemp > 0) {
+ FX_FLOAT fLineHeightTmp = fBaseLineTemp + pTP->rtPiece.height;
+ if (fLineHeight < fLineHeightTmp) {
+ fLineHeight = fLineHeightTmp;
+ } else {
+ fBaseLineTemp = 0;
+ }
+ } else if (fBaseLine < -fBaseLineTemp) {
+ fBaseLine = -fBaseLineTemp;
+ }
+ fLineStep = std::max(fLineStep, fLineHeight);
+ if (pUserData != NULL && pUserData->m_pLinkData != NULL) {
+ pUserData->m_pLinkData->AddRef();
+ pTP->pLinkData = pUserData->m_pLinkData;
+ } else {
+ pTP->pLinkData = NULL;
+ }
+ DoTabstops(pStyle, pPieceLine);
+ }
+ for (i = 0; i < iPieces; i++) {
+ XFA_LPTEXTPIECE pTP = pPieceLine->m_textPieces.GetAt(i);
+ FX_FLOAT& fTop = pTP->rtPiece.top;
+ FX_FLOAT fBaseLineTemp = fTop;
+ fTop = fLinePos + fLineStep - pTP->rtPiece.height - fBaseLineTemp;
+ fTop = std::max(0.0f, fTop);
+ }
+ fLinePos += fLineStep + fBaseLine;
+ } else {
+ FX_FLOAT fLineStep = 0;
+ FX_FLOAT fLineWidth = 0;
+ for (int32_t i = 0; i < iPieces; i++) {
+ const CFX_RTFPiece* pPiece = m_pBreak->GetBreakPiece(i);
+ CXFA_TextUserData* pUserData = (CXFA_TextUserData*)pPiece->m_pUserData;
+ if (pUserData != NULL) {
+ pStyle = pUserData->m_pStyle;
+ }
+ FX_FLOAT fVerScale = pPiece->m_iVerticalScale / 100.0f;
+ FX_FLOAT fBaseLine = m_textParser.GetBaseline(m_pTextProvider, pStyle);
+ FX_FLOAT fLineHeight = m_textParser.GetLineHeight(
+ m_pTextProvider, pStyle, m_iLines == 0, fVerScale);
+ if (fBaseLine > 0) {
+ FX_FLOAT fLineHeightTmp =
+ fBaseLine + (FX_FLOAT)pPiece->m_iFontSize * fVerScale / 20.0f;
+ if (fLineHeight < fLineHeightTmp) {
+ fLineHeight = fLineHeightTmp;
+ }
+ }
+ fLineStep = std::max(fLineStep, fLineHeight);
+ fLineWidth += pPiece->m_iWidth / 20000.0f;
+ }
+ fLinePos += fLineStep;
+ m_fMaxWidth = std::max(m_fMaxWidth, fLineWidth);
+ if (m_pLoader && m_pLoader->m_bSaveLineHeight) {
+ FX_FLOAT fHeight = fLinePos - m_pLoader->m_fLastPos;
+ m_pLoader->m_fLastPos = fLinePos;
+ m_pLoader->m_lineHeights.Add(fHeight);
+ }
+ }
+ if (pStyle) {
+ pStyle->AddRef();
+ }
+ m_pBreak->ClearBreakPieces();
+ if (dwStatus == FX_RTFBREAK_ParagraphBreak) {
+ m_pBreak->Reset();
+ if (!pStyle && bEndBreak) {
+ CXFA_Para para = m_pTextProvider->GetParaNode();
+ if (para.IsExistInXML()) {
+ FX_FLOAT fStartPos = para.GetMarginLeft();
+ FX_FLOAT fIndent = para.GetTextIndent();
+ if (fIndent > 0) {
+ fStartPos += fIndent;
+ }
+ FX_FLOAT fSpaceBelow = para.GetSpaceBelow();
+ if (fSpaceBelow < 0.1f) {
+ fSpaceBelow = 0;
+ }
+ m_pBreak->SetLineStartPos(fStartPos);
+ fLinePos += fSpaceBelow;
+ }
+ }
+ }
+ if (pStyle) {
+ FX_FLOAT fStart = 0;
+ const FDE_CSSRECT* pRect = pStyle->GetBoundaryStyles()->GetMarginWidth();
+ if (pRect) {
+ fStart = pRect->left.GetValue();
+ }
+ FX_FLOAT fTextIndent =
+ pStyle->GetParagraphStyles()->GetTextIndent().GetValue();
+ if (fTextIndent < 0) {
+ fStart -= fTextIndent;
+ }
+ m_pBreak->SetLineStartPos(fStart);
+ pStyle->Release();
+ }
+ m_iLines++;
+}
+void CXFA_TextLayout::RenderString(IFDE_RenderDevice* pDevice,
+ IFDE_SolidBrush* pBrush,
+ CXFA_PieceLine* pPieceLine,
+ int32_t iPiece,
+ FXTEXT_CHARPOS* pCharPos,
+ const CFX_Matrix& tmDoc2Device) {
+ XFA_LPCTEXTPIECE pPiece = pPieceLine->m_textPieces.GetAt(iPiece);
+ int32_t iCount = GetDisplayPos(pPiece, pCharPos);
+ if (iCount > 0) {
+ pBrush->SetColor(pPiece->dwColor);
+ pDevice->DrawString(pBrush, pPiece->pFont, pCharPos, iCount,
+ pPiece->fFontSize, &tmDoc2Device);
+ }
+ pPieceLine->m_charCounts.Add(iCount);
+}
+void CXFA_TextLayout::RenderPath(IFDE_RenderDevice* pDevice,
+ IFDE_Pen* pPen,
+ CXFA_PieceLine* pPieceLine,
+ int32_t iPiece,
+ FXTEXT_CHARPOS* pCharPos,
+ const CFX_Matrix& tmDoc2Device) {
+ XFA_TEXTPIECE* pPiece = pPieceLine->m_textPieces.GetAt(iPiece);
+ FX_BOOL bNoUnderline = pPiece->iUnderline < 1 || pPiece->iUnderline > 2;
+ FX_BOOL bNoLineThrough = pPiece->iLineThrough < 1 || pPiece->iLineThrough > 2;
+ if (bNoUnderline && bNoLineThrough) {
+ return;
+ }
+ pPen->SetColor(pPiece->dwColor);
+ IFDE_Path* pPath = IFDE_Path::Create();
+ int32_t iChars = GetDisplayPos(pPiece, pCharPos);
+ if (iChars > 0) {
+ CFX_PointF pt1, pt2;
+ FX_FLOAT fEndY = pCharPos[0].m_OriginY + 1.05f;
+ int32_t i = 0;
+ if (pPiece->iPeriod == XFA_ATTRIBUTEENUM_Word) {
+ for (int32_t i = 0; i < pPiece->iUnderline; i++) {
+ for (int32_t j = 0; j < iChars; j++) {
+ pt1.x = pCharPos[j].m_OriginX;
+ pt2.x =
+ pt1.x + pCharPos[j].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
+ pt1.y = pt2.y = fEndY;
+ pPath->AddLine(pt1, pt2);
+ }
+ fEndY += 2.0f;
+ }
+ } else {
+ pt1.x = pCharPos[0].m_OriginX;
+ pt2.x =
+ pCharPos[iChars - 1].m_OriginX +
+ pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
+ for (int32_t i = 0; i < pPiece->iUnderline; i++) {
+ pt1.y = pt2.y = fEndY;
+ pPath->AddLine(pt1, pt2);
+ fEndY += 2.0f;
+ }
+ }
+ fEndY = pCharPos[0].m_OriginY - pPiece->rtPiece.height * 0.25f;
+ pt1.x = pCharPos[0].m_OriginX;
+ pt2.x = pCharPos[iChars - 1].m_OriginX +
+ pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
+ for (i = 0; i < pPiece->iLineThrough; i++) {
+ pt1.y = pt2.y = fEndY;
+ pPath->AddLine(pt1, pt2);
+ fEndY += 2.0f;
+ }
+ } else {
+ if (bNoLineThrough &&
+ (bNoUnderline || pPiece->iPeriod != XFA_ATTRIBUTEENUM_All)) {
+ goto XFA_RenderPathRet;
+ }
+ int32_t iCharsTmp = 0;
+ int32_t iPiecePrev = iPiece, iPieceNext = iPiece;
+ while (iPiecePrev > 0) {
+ iPiecePrev--;
+ iCharsTmp = pPieceLine->m_charCounts.GetAt(iPiecePrev);
+ if (iCharsTmp > 0) {
+ break;
+ }
+ }
+ if (iCharsTmp == 0) {
+ goto XFA_RenderPathRet;
+ }
+ iCharsTmp = 0;
+ int32_t iPieces = pPieceLine->m_textPieces.GetSize();
+ while (iPieceNext < iPieces - 1) {
+ iPieceNext++;
+ iCharsTmp = pPieceLine->m_charCounts.GetAt(iPieceNext);
+ if (iCharsTmp > 0) {
+ break;
+ }
+ }
+ if (iCharsTmp == 0) {
+ goto XFA_RenderPathRet;
+ }
+ FX_FLOAT fOrgX = 0.0f, fEndX = 0.0f;
+ pPiece = pPieceLine->m_textPieces.GetAt(iPiecePrev);
+ iChars = GetDisplayPos(pPiece, pCharPos);
+ if (iChars < 1) {
+ goto XFA_RenderPathRet;
+ }
+ fOrgX = pCharPos[iChars - 1].m_OriginX +
+ pCharPos[iChars - 1].m_FontCharWidth * pPiece->fFontSize / 1000.0f;
+ pPiece = pPieceLine->m_textPieces.GetAt(iPieceNext);
+ iChars = GetDisplayPos(pPiece, pCharPos);
+ if (iChars < 1) {
+ goto XFA_RenderPathRet;
+ }
+ fEndX = pCharPos[0].m_OriginX;
+ CFX_PointF pt1, pt2;
+ pt1.x = fOrgX, pt2.x = fEndX;
+ FX_FLOAT fEndY = pCharPos[0].m_OriginY + 1.05f;
+ int32_t i = 0;
+ for (i = 0; i < pPiece->iUnderline; i++) {
+ pt1.y = pt2.y = fEndY;
+ pPath->AddLine(pt1, pt2);
+ fEndY += 2.0f;
+ }
+ fEndY = pCharPos[0].m_OriginY - pPiece->rtPiece.height * 0.25f;
+ for (i = 0; i < pPiece->iLineThrough; i++) {
+ pt1.y = pt2.y = fEndY;
+ pPath->AddLine(pt1, pt2);
+ fEndY += 2.0f;
+ }
+ }
+ pDevice->DrawPath(pPen, 1, pPath, &tmDoc2Device);
+XFA_RenderPathRet:
+ pPath->Release();
+}
+int32_t CXFA_TextLayout::GetDisplayPos(XFA_LPCTEXTPIECE pPiece,
+ FXTEXT_CHARPOS* pCharPos,
+ FX_BOOL bCharCode) {
+ if (pPiece == NULL) {
+ return 0;
+ }
+ FX_RTFTEXTOBJ tr;
+ if (!ToRun(pPiece, tr)) {
+ return 0;
+ }
+ return m_pBreak->GetDisplayPos(&tr, pCharPos, bCharCode);
+}
+FX_BOOL CXFA_TextLayout::ToRun(XFA_LPCTEXTPIECE pPiece, FX_RTFTEXTOBJ& tr) {
+ int32_t iLength = pPiece->iChars;
+ if (iLength < 1) {
+ return FALSE;
+ }
+ tr.pStr = pPiece->pszText;
+ tr.pFont = pPiece->pFont;
+ tr.pRect = &pPiece->rtPiece;
+ tr.pWidths = pPiece->pWidths;
+ tr.iLength = iLength;
+ tr.fFontSize = pPiece->fFontSize;
+ tr.iBidiLevel = pPiece->iBidiLevel;
+ tr.iCharRotation = 0;
+ tr.wLineBreakChar = L'\n';
+ tr.iVerticalScale = pPiece->iVerScale;
+ tr.dwLayoutStyles = FX_RTFLAYOUTSTYLE_ExpandTab;
+ tr.iHorizontalScale = pPiece->iHorScale;
+ return TRUE;
+}
diff --git a/xfa/src/fxfa/src/app/xfa_textlayout.h b/xfa/src/fxfa/src/app/xfa_textlayout.h
index b47b37359a..0078ec74bb 100644
--- a/xfa/src/fxfa/src/app/xfa_textlayout.h
+++ b/xfa/src/fxfa/src/app/xfa_textlayout.h
@@ -1,406 +1,406 @@
-// 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 _FXFA_TEXTLAYOUT_H
-#define _FXFA_TEXTLAYOUT_H
-#define XFA_LOADERCNTXTFLG_FILTERSPACE 0x001
-class CXFA_TextTabstopsContext;
-class IXFA_TextProvider {
- public:
- virtual ~IXFA_TextProvider() {}
- virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText) = 0;
- virtual CXFA_Para GetParaNode() = 0;
- virtual CXFA_Font GetFontNode() = 0;
- virtual FX_BOOL IsCheckButtonAndAutoWidth() = 0;
- virtual CXFA_FFDoc* GetDocNode() = 0;
- virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI,
- FX_BOOL bRaw,
- const CFX_WideString& wsAttr,
- CFX_WideString& wsValue) = 0;
-};
-class CXFA_CSSTagProvider : public IFDE_CSSTagProvider {
- public:
- CXFA_CSSTagProvider() : m_bTagAviliable(FALSE), m_bContent(FALSE) {}
- virtual ~CXFA_CSSTagProvider();
- virtual CFX_WideStringC GetTagName() { return m_wsTagName; }
- virtual FX_POSITION GetFirstAttribute() {
- return m_Attributes.GetStartPosition();
- }
- virtual void GetNextAttribute(FX_POSITION& pos,
- CFX_WideStringC& wsAttr,
- CFX_WideStringC& wsValue);
- void SetTagNameObj(const CFX_WideString& wsName) { m_wsTagName = wsName; }
- void SetAttribute(const CFX_WideString& wsAttr,
- const CFX_WideString& wsValue);
- FX_BOOL m_bTagAviliable;
- FX_BOOL m_bContent;
-
- protected:
- CFX_WideString m_wsTagName;
- CFX_MapPtrToPtr m_Attributes;
-};
-class CXFA_TextParseContext : public CFX_Target {
- public:
- CXFA_TextParseContext()
- : m_pParentStyle(nullptr),
- m_ppMatchedDecls(nullptr),
- m_dwMatchedDecls(0),
- m_eDisplay(FDE_CSSDISPLAY_None) {}
- ~CXFA_TextParseContext() {
- if (m_pParentStyle)
- m_pParentStyle->Release();
- FX_Free(m_ppMatchedDecls);
- }
- void SetDisplay(FDE_CSSDISPLAY eDisplay) { m_eDisplay = eDisplay; }
- FDE_CSSDISPLAY GetDisplay() const { return m_eDisplay; }
- void SetDecls(const IFDE_CSSDeclaration** ppDeclArray, int32_t iDeclCount);
- const IFDE_CSSDeclaration** GetDecls() {
- return (const IFDE_CSSDeclaration**)m_ppMatchedDecls;
- }
- FX_DWORD CountDecls() const { return m_dwMatchedDecls; }
- IFDE_CSSComputedStyle* m_pParentStyle;
-
- protected:
- IFDE_CSSDeclaration** m_ppMatchedDecls;
- FX_DWORD m_dwMatchedDecls : 28;
- FDE_CSSDISPLAY m_eDisplay : 4;
-};
-class CXFA_TextParser {
- public:
- CXFA_TextParser() : m_pAllocator(NULL), m_pSelector(NULL), m_pUASheet(NULL) {}
- virtual ~CXFA_TextParser();
- void Reset();
- void DoParse(IFDE_XMLNode* pXMLContainer, IXFA_TextProvider* pTextProvider);
- IFDE_CSSComputedStyle* CreateRootStyle(IXFA_TextProvider* pTextProvider);
- IFDE_CSSComputedStyle* ComputeStyle(IFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle);
- FX_BOOL IsParsed() const { return m_pAllocator != NULL; }
-
- int32_t GetVAlgin(IXFA_TextProvider* pTextProvider) const;
- FX_FLOAT GetTabInterval(IFDE_CSSComputedStyle* pStyle) const;
- int32_t CountTabs(IFDE_CSSComputedStyle* pStyle) const;
- FX_BOOL IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const;
- FX_BOOL GetTabstops(IFDE_CSSComputedStyle* pStyle,
- CXFA_TextTabstopsContext* pTabstopContext);
- IFX_Font* GetFont(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const;
- FX_FLOAT GetFontSize(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const;
- int32_t GetHorScale(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- IFDE_XMLNode* pXMLNode) const;
- int32_t GetVerScale(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const;
- void GetUnderline(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- int32_t& iUnderline,
- int32_t& iPeriod) const;
- void GetLinethrough(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- int32_t& iLinethrough) const;
- FX_ARGB GetColor(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const;
- FX_FLOAT GetBaseline(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle) const;
- FX_FLOAT GetLineHeight(IXFA_TextProvider* pTextProvider,
- IFDE_CSSComputedStyle* pStyle,
- FX_BOOL bFirst,
- FX_FLOAT fVerScale) const;
- FX_BOOL GetEmbbedObj(IXFA_TextProvider* pTextProvider,
- IFDE_XMLNode* pXMLNode,
- CFX_WideString& wsValue);
- CXFA_TextParseContext* GetParseContextFromMap(IFDE_XMLNode* pXMLNode);
-
- private:
- void InitCSSData(IXFA_TextProvider* pTextProvider);
- void ParseRichText(IFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle);
- void ParseTagInfo(IFDE_XMLNode* pXMLNode, CXFA_CSSTagProvider& tagProvider);
- IFDE_CSSStyleSheet* LoadDefaultSheetStyle();
- IFDE_CSSComputedStyle* CreateStyle(IFDE_CSSComputedStyle* pParentStyle);
- IFX_MEMAllocator* m_pAllocator;
- IFDE_CSSStyleSelector* m_pSelector;
- IFDE_CSSStyleSheet* m_pUASheet;
- CFX_MapPtrTemplate<IFDE_XMLNode*, CXFA_TextParseContext*>
- m_mapXMLNodeToParseContext;
-};
-class CXFA_LoaderContext {
- public:
- CXFA_LoaderContext()
- : m_bSaveLineHeight(FALSE),
- m_fWidth(0),
- m_fHeight(0),
- m_fLastPos(0),
- m_fStartLineOffset(0),
- m_iChar(0),
- m_iTotalLines(-1),
- m_pXMLNode(NULL),
- m_pNode(NULL),
- m_pParentStyle(NULL),
- m_dwFlags(0) {}
- FX_BOOL m_bSaveLineHeight;
- FX_FLOAT m_fWidth;
- FX_FLOAT m_fHeight;
- FX_FLOAT m_fLastPos;
- FX_FLOAT m_fStartLineOffset;
- int32_t m_iChar;
- int32_t m_iLines;
- int32_t m_iTotalLines;
- IFDE_XMLNode* m_pXMLNode;
- CXFA_Node* m_pNode;
- IFDE_CSSComputedStyle* m_pParentStyle;
- CFX_ArrayTemplate<FX_FLOAT> m_lineHeights;
- FX_DWORD m_dwFlags;
- CFX_FloatArray m_BlocksHeight;
-};
-class CXFA_LinkUserData : public IFX_Unknown, public CFX_Target {
- public:
- CXFA_LinkUserData(IFX_MEMAllocator* pAllocator, FX_WCHAR* pszText)
- : m_pAllocator(pAllocator), m_dwRefCount(1) {
- m_pszURLContent = pszText;
- }
- ~CXFA_LinkUserData() {}
- virtual FX_DWORD Release() {
- FX_DWORD dwRefCount = --m_dwRefCount;
- if (dwRefCount <= 0) {
- FDE_DeleteWith(CXFA_LinkUserData, m_pAllocator, this);
- }
- return dwRefCount;
- }
- virtual FX_DWORD AddRef() { return ++m_dwRefCount; }
-
- public:
- const FX_WCHAR* GetLinkURL() { return m_pszURLContent; };
-
- protected:
- IFX_MEMAllocator* m_pAllocator;
- FX_DWORD m_dwRefCount;
- CFX_WideString m_pszURLContent;
-};
-class CXFA_TextUserData : public IFX_Unknown, public CFX_Target {
- public:
- CXFA_TextUserData(IFX_MEMAllocator* pAllocator, IFDE_CSSComputedStyle* pStyle)
- : m_pStyle(pStyle),
- m_pLinkData(nullptr),
- m_pAllocator(pAllocator),
- m_dwRefCount(0) {
- FXSYS_assert(m_pAllocator);
- if (m_pStyle)
- m_pStyle->AddRef();
- }
- CXFA_TextUserData(IFX_MEMAllocator* pAllocator,
- IFDE_CSSComputedStyle* pStyle,
- CXFA_LinkUserData* pLinkData)
- : m_pStyle(pStyle),
- m_pLinkData(pLinkData),
- m_pAllocator(pAllocator),
- m_dwRefCount(0) {
- FXSYS_assert(m_pAllocator);
- if (m_pStyle)
- m_pStyle->AddRef();
- }
- ~CXFA_TextUserData() {
- if (m_pStyle)
- m_pStyle->Release();
- if (m_pLinkData)
- m_pLinkData->Release();
- }
- virtual FX_DWORD Release() {
- FX_DWORD dwRefCount = --m_dwRefCount;
- if (dwRefCount == 0) {
- FDE_DeleteWith(CXFA_TextUserData, m_pAllocator, this);
- }
- return dwRefCount;
- }
- virtual FX_DWORD AddRef() { return ++m_dwRefCount; }
-
- IFDE_CSSComputedStyle* m_pStyle;
- CXFA_LinkUserData* m_pLinkData;
-
- protected:
- IFX_MEMAllocator* m_pAllocator;
- FX_DWORD m_dwRefCount;
-};
-typedef struct _XFA_TEXTPIECE : public CFX_Target {
- FX_WCHAR* pszText;
- int32_t iChars;
- int32_t* pWidths;
- int32_t iHorScale;
- int32_t iVerScale;
- int32_t iBidiLevel;
- int32_t iUnderline;
- int32_t iPeriod;
- int32_t iLineThrough;
- IFX_Font* pFont;
- FX_ARGB dwColor;
- FX_FLOAT fFontSize;
- CFX_RectF rtPiece;
- CXFA_LinkUserData* pLinkData;
-
- _XFA_TEXTPIECE() : pszText(NULL), pFont(NULL), pLinkData(NULL) {
- pszText = NULL;
- }
- ~_XFA_TEXTPIECE() {
- pszText = NULL;
- if (NULL != pLinkData) {
- pLinkData->Release();
- pLinkData = NULL;
- }
- }
-} XFA_TEXTPIECE, *XFA_LPTEXTPIECE;
-typedef XFA_TEXTPIECE const* XFA_LPCTEXTPIECE;
-typedef CFX_ArrayTemplate<XFA_LPTEXTPIECE> CXFA_PieceArray;
-class CXFA_PieceLine : public CFX_Target {
- public:
- CXFA_PieceLine() {}
- CXFA_PieceArray m_textPieces;
- CFX_Int32Array m_charCounts;
-};
-typedef CFX_ArrayTemplate<CXFA_PieceLine*> CXFA_PieceLineArray;
-struct XFA_TABSTOPS {
- FX_DWORD dwAlign;
- FX_FLOAT fTabstops;
-};
-class CXFA_TextTabstopsContext {
- public:
- CXFA_TextTabstopsContext()
- : m_iTabCount(0),
- m_iTabIndex(-1),
- m_bTabstops(FALSE),
- m_fTabWidth(0),
- m_fLeft(0) {}
- void Append(FX_DWORD dwAlign, FX_FLOAT fTabstops) {
- int32_t i = 0;
- for (i = 0; i < m_iTabCount; i++) {
- XFA_TABSTOPS* pTabstop = m_tabstops.GetDataPtr(i);
- if (fTabstops < pTabstop->fTabstops) {
- break;
- }
- }
- m_tabstops.InsertSpaceAt(i, 1);
- XFA_TABSTOPS tabstop;
- tabstop.dwAlign = dwAlign;
- tabstop.fTabstops = fTabstops;
- m_tabstops.SetAt(i, tabstop);
- m_iTabCount++;
- }
- void RemoveAll() {
- m_tabstops.RemoveAll();
- m_iTabCount = 0;
- }
- void Reset() {
- m_iTabIndex = -1;
- m_bTabstops = FALSE;
- m_fTabWidth = 0;
- m_fLeft = 0;
- }
- CFX_ArrayTemplate<XFA_TABSTOPS> m_tabstops;
- int32_t m_iTabCount;
- int32_t m_iTabIndex;
- FX_BOOL m_bTabstops;
- FX_FLOAT m_fTabWidth;
- FX_FLOAT m_fLeft;
-};
-class CXFA_TextLayout {
- public:
- CXFA_TextLayout(IXFA_TextProvider* pTextProvider);
- virtual ~CXFA_TextLayout();
- int32_t GetText(CFX_WideString& wsText);
- FX_FLOAT GetLayoutHeight();
- FX_FLOAT StartLayout(FX_FLOAT fWidth = -1);
- FX_BOOL DoLayout(int32_t iBlockIndex,
- FX_FLOAT& fCalcHeight,
- FX_FLOAT fContentAreaHeight = -1,
- FX_FLOAT fTextHeight = -1);
-
- FX_BOOL CalcSize(const CFX_SizeF& minSize,
- const CFX_SizeF& maxSize,
- CFX_SizeF& defaultSize);
- FX_BOOL Layout(const CFX_SizeF& size, FX_FLOAT* fHeight = NULL);
- void ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex);
- FX_BOOL DrawString(CFX_RenderDevice* pFxDevice,
- const CFX_Matrix& tmDoc2Device,
- const CFX_RectF& rtClip,
- int32_t iBlock = 0);
- FX_BOOL IsLoaded() const { return m_pieceLines.GetSize() > 0; }
- void Unload();
- const CXFA_PieceLineArray* GetPieceLines();
-
- FX_BOOL m_bHasBlock;
- CFX_Int32Array m_Blocks;
-
- private:
- void GetTextDataNode();
- IFDE_XMLNode* GetXMLContainerNode();
- IFX_RTFBreak* CreateBreak(FX_BOOL bDefault);
- void InitBreak(FX_FLOAT fLineWidth);
- void InitBreak(IFDE_CSSComputedStyle* pStyle,
- FDE_CSSDISPLAY eDisplay,
- FX_FLOAT fLineWidth,
- IFDE_XMLNode* pXMLNode,
- IFDE_CSSComputedStyle* pParentStyle = NULL);
- FX_BOOL Loader(const CFX_SizeF& szText,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces = TRUE);
- void LoadText(CXFA_Node* pNode,
- const CFX_SizeF& szText,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces);
- FX_BOOL LoadRichText(IFDE_XMLNode* pXMLNode,
- const CFX_SizeF& szText,
- FX_FLOAT& fLinePos,
- IFDE_CSSComputedStyle* pParentStyle,
- FX_BOOL bSavePieces,
- CXFA_LinkUserData* pLinkData = NULL,
- FX_BOOL bEndBreak = TRUE,
- FX_BOOL bIsOl = FALSE,
- int32_t iLiCount = 0);
- FX_BOOL AppendChar(const CFX_WideString& wsText,
- FX_FLOAT& fLinePos,
- FX_FLOAT fSpaceAbove,
- FX_BOOL bSavePieces);
- void AppendTextLine(FX_DWORD dwStatus,
- FX_FLOAT& fLinePos,
- FX_BOOL bSavePieces,
- FX_BOOL bEndBreak = FALSE);
- void EndBreak(FX_DWORD dwStatus, FX_FLOAT& fLinePos, FX_BOOL bDefault);
- FX_BOOL IsEnd(FX_BOOL bSavePieces);
- void ProcessText(CFX_WideString& wsText);
- void UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom);
- void RenderString(IFDE_RenderDevice* pDevice,
- IFDE_SolidBrush* pBrush,
- CXFA_PieceLine* pPieceLine,
- int32_t iPiece,
- FXTEXT_CHARPOS* pCharPos,
- const CFX_Matrix& tmDoc2Device);
- void RenderPath(IFDE_RenderDevice* pDevice,
- IFDE_Pen* pPen,
- CXFA_PieceLine* pPieceLine,
- int32_t iPiece,
- FXTEXT_CHARPOS* pCharPos,
- const CFX_Matrix& tmDoc2Device);
- int32_t GetDisplayPos(XFA_LPCTEXTPIECE pPiece,
- FXTEXT_CHARPOS* pCharPos,
- FX_BOOL bCharCode = FALSE);
- FX_BOOL ToRun(XFA_LPCTEXTPIECE pPiece, FX_RTFTEXTOBJ& tr);
- void DoTabstops(IFDE_CSSComputedStyle* pStyle, CXFA_PieceLine* pPieceLine);
- FX_BOOL Layout(int32_t iBlock);
- int32_t CountBlocks() const;
-
- IXFA_TextProvider* m_pTextProvider;
- CXFA_Node* m_pTextDataNode;
- FX_BOOL m_bRichText;
- IFX_MEMAllocator* m_pAllocator;
- IFX_RTFBreak* m_pBreak;
- CXFA_LoaderContext* m_pLoader;
- int32_t m_iLines;
- FX_FLOAT m_fMaxWidth;
- CXFA_TextParser m_textParser;
- CXFA_PieceLineArray m_pieceLines;
- CXFA_TextTabstopsContext* m_pTabstopContext;
- FX_BOOL m_bBlockContinue;
-};
-#endif
+// 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 _FXFA_TEXTLAYOUT_H
+#define _FXFA_TEXTLAYOUT_H
+#define XFA_LOADERCNTXTFLG_FILTERSPACE 0x001
+class CXFA_TextTabstopsContext;
+class IXFA_TextProvider {
+ public:
+ virtual ~IXFA_TextProvider() {}
+ virtual CXFA_Node* GetTextNode(FX_BOOL& bRichText) = 0;
+ virtual CXFA_Para GetParaNode() = 0;
+ virtual CXFA_Font GetFontNode() = 0;
+ virtual FX_BOOL IsCheckButtonAndAutoWidth() = 0;
+ virtual CXFA_FFDoc* GetDocNode() = 0;
+ virtual FX_BOOL GetEmbbedObj(FX_BOOL bURI,
+ FX_BOOL bRaw,
+ const CFX_WideString& wsAttr,
+ CFX_WideString& wsValue) = 0;
+};
+class CXFA_CSSTagProvider : public IFDE_CSSTagProvider {
+ public:
+ CXFA_CSSTagProvider() : m_bTagAviliable(FALSE), m_bContent(FALSE) {}
+ virtual ~CXFA_CSSTagProvider();
+ virtual CFX_WideStringC GetTagName() { return m_wsTagName; }
+ virtual FX_POSITION GetFirstAttribute() {
+ return m_Attributes.GetStartPosition();
+ }
+ virtual void GetNextAttribute(FX_POSITION& pos,
+ CFX_WideStringC& wsAttr,
+ CFX_WideStringC& wsValue);
+ void SetTagNameObj(const CFX_WideString& wsName) { m_wsTagName = wsName; }
+ void SetAttribute(const CFX_WideString& wsAttr,
+ const CFX_WideString& wsValue);
+ FX_BOOL m_bTagAviliable;
+ FX_BOOL m_bContent;
+
+ protected:
+ CFX_WideString m_wsTagName;
+ CFX_MapPtrToPtr m_Attributes;
+};
+class CXFA_TextParseContext : public CFX_Target {
+ public:
+ CXFA_TextParseContext()
+ : m_pParentStyle(nullptr),
+ m_ppMatchedDecls(nullptr),
+ m_dwMatchedDecls(0),
+ m_eDisplay(FDE_CSSDISPLAY_None) {}
+ ~CXFA_TextParseContext() {
+ if (m_pParentStyle)
+ m_pParentStyle->Release();
+ FX_Free(m_ppMatchedDecls);
+ }
+ void SetDisplay(FDE_CSSDISPLAY eDisplay) { m_eDisplay = eDisplay; }
+ FDE_CSSDISPLAY GetDisplay() const { return m_eDisplay; }
+ void SetDecls(const IFDE_CSSDeclaration** ppDeclArray, int32_t iDeclCount);
+ const IFDE_CSSDeclaration** GetDecls() {
+ return (const IFDE_CSSDeclaration**)m_ppMatchedDecls;
+ }
+ FX_DWORD CountDecls() const { return m_dwMatchedDecls; }
+ IFDE_CSSComputedStyle* m_pParentStyle;
+
+ protected:
+ IFDE_CSSDeclaration** m_ppMatchedDecls;
+ FX_DWORD m_dwMatchedDecls : 28;
+ FDE_CSSDISPLAY m_eDisplay : 4;
+};
+class CXFA_TextParser {
+ public:
+ CXFA_TextParser() : m_pAllocator(NULL), m_pSelector(NULL), m_pUASheet(NULL) {}
+ virtual ~CXFA_TextParser();
+ void Reset();
+ void DoParse(IFDE_XMLNode* pXMLContainer, IXFA_TextProvider* pTextProvider);
+ IFDE_CSSComputedStyle* CreateRootStyle(IXFA_TextProvider* pTextProvider);
+ IFDE_CSSComputedStyle* ComputeStyle(IFDE_XMLNode* pXMLNode,
+ IFDE_CSSComputedStyle* pParentStyle);
+ FX_BOOL IsParsed() const { return m_pAllocator != NULL; }
+
+ int32_t GetVAlgin(IXFA_TextProvider* pTextProvider) const;
+ FX_FLOAT GetTabInterval(IFDE_CSSComputedStyle* pStyle) const;
+ int32_t CountTabs(IFDE_CSSComputedStyle* pStyle) const;
+ FX_BOOL IsSpaceRun(IFDE_CSSComputedStyle* pStyle) const;
+ FX_BOOL GetTabstops(IFDE_CSSComputedStyle* pStyle,
+ CXFA_TextTabstopsContext* pTabstopContext);
+ IFX_Font* GetFont(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const;
+ FX_FLOAT GetFontSize(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const;
+ int32_t GetHorScale(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ IFDE_XMLNode* pXMLNode) const;
+ int32_t GetVerScale(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const;
+ void GetUnderline(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ int32_t& iUnderline,
+ int32_t& iPeriod) const;
+ void GetLinethrough(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ int32_t& iLinethrough) const;
+ FX_ARGB GetColor(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const;
+ FX_FLOAT GetBaseline(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle) const;
+ FX_FLOAT GetLineHeight(IXFA_TextProvider* pTextProvider,
+ IFDE_CSSComputedStyle* pStyle,
+ FX_BOOL bFirst,
+ FX_FLOAT fVerScale) const;
+ FX_BOOL GetEmbbedObj(IXFA_TextProvider* pTextProvider,
+ IFDE_XMLNode* pXMLNode,
+ CFX_WideString& wsValue);
+ CXFA_TextParseContext* GetParseContextFromMap(IFDE_XMLNode* pXMLNode);
+
+ private:
+ void InitCSSData(IXFA_TextProvider* pTextProvider);
+ void ParseRichText(IFDE_XMLNode* pXMLNode,
+ IFDE_CSSComputedStyle* pParentStyle);
+ void ParseTagInfo(IFDE_XMLNode* pXMLNode, CXFA_CSSTagProvider& tagProvider);
+ IFDE_CSSStyleSheet* LoadDefaultSheetStyle();
+ IFDE_CSSComputedStyle* CreateStyle(IFDE_CSSComputedStyle* pParentStyle);
+ IFX_MEMAllocator* m_pAllocator;
+ IFDE_CSSStyleSelector* m_pSelector;
+ IFDE_CSSStyleSheet* m_pUASheet;
+ CFX_MapPtrTemplate<IFDE_XMLNode*, CXFA_TextParseContext*>
+ m_mapXMLNodeToParseContext;
+};
+class CXFA_LoaderContext {
+ public:
+ CXFA_LoaderContext()
+ : m_bSaveLineHeight(FALSE),
+ m_fWidth(0),
+ m_fHeight(0),
+ m_fLastPos(0),
+ m_fStartLineOffset(0),
+ m_iChar(0),
+ m_iTotalLines(-1),
+ m_pXMLNode(NULL),
+ m_pNode(NULL),
+ m_pParentStyle(NULL),
+ m_dwFlags(0) {}
+ FX_BOOL m_bSaveLineHeight;
+ FX_FLOAT m_fWidth;
+ FX_FLOAT m_fHeight;
+ FX_FLOAT m_fLastPos;
+ FX_FLOAT m_fStartLineOffset;
+ int32_t m_iChar;
+ int32_t m_iLines;
+ int32_t m_iTotalLines;
+ IFDE_XMLNode* m_pXMLNode;
+ CXFA_Node* m_pNode;
+ IFDE_CSSComputedStyle* m_pParentStyle;
+ CFX_ArrayTemplate<FX_FLOAT> m_lineHeights;
+ FX_DWORD m_dwFlags;
+ CFX_FloatArray m_BlocksHeight;
+};
+class CXFA_LinkUserData : public IFX_Unknown, public CFX_Target {
+ public:
+ CXFA_LinkUserData(IFX_MEMAllocator* pAllocator, FX_WCHAR* pszText)
+ : m_pAllocator(pAllocator), m_dwRefCount(1) {
+ m_pszURLContent = pszText;
+ }
+ ~CXFA_LinkUserData() {}
+ virtual FX_DWORD Release() {
+ FX_DWORD dwRefCount = --m_dwRefCount;
+ if (dwRefCount <= 0) {
+ FDE_DeleteWith(CXFA_LinkUserData, m_pAllocator, this);
+ }
+ return dwRefCount;
+ }
+ virtual FX_DWORD AddRef() { return ++m_dwRefCount; }
+
+ public:
+ const FX_WCHAR* GetLinkURL() { return m_pszURLContent; };
+
+ protected:
+ IFX_MEMAllocator* m_pAllocator;
+ FX_DWORD m_dwRefCount;
+ CFX_WideString m_pszURLContent;
+};
+class CXFA_TextUserData : public IFX_Unknown, public CFX_Target {
+ public:
+ CXFA_TextUserData(IFX_MEMAllocator* pAllocator, IFDE_CSSComputedStyle* pStyle)
+ : m_pStyle(pStyle),
+ m_pLinkData(nullptr),
+ m_pAllocator(pAllocator),
+ m_dwRefCount(0) {
+ FXSYS_assert(m_pAllocator);
+ if (m_pStyle)
+ m_pStyle->AddRef();
+ }
+ CXFA_TextUserData(IFX_MEMAllocator* pAllocator,
+ IFDE_CSSComputedStyle* pStyle,
+ CXFA_LinkUserData* pLinkData)
+ : m_pStyle(pStyle),
+ m_pLinkData(pLinkData),
+ m_pAllocator(pAllocator),
+ m_dwRefCount(0) {
+ FXSYS_assert(m_pAllocator);
+ if (m_pStyle)
+ m_pStyle->AddRef();
+ }
+ ~CXFA_TextUserData() {
+ if (m_pStyle)
+ m_pStyle->Release();
+ if (m_pLinkData)
+ m_pLinkData->Release();
+ }
+ virtual FX_DWORD Release() {
+ FX_DWORD dwRefCount = --m_dwRefCount;
+ if (dwRefCount == 0) {
+ FDE_DeleteWith(CXFA_TextUserData, m_pAllocator, this);
+ }
+ return dwRefCount;
+ }
+ virtual FX_DWORD AddRef() { return ++m_dwRefCount; }
+
+ IFDE_CSSComputedStyle* m_pStyle;
+ CXFA_LinkUserData* m_pLinkData;
+
+ protected:
+ IFX_MEMAllocator* m_pAllocator;
+ FX_DWORD m_dwRefCount;
+};
+typedef struct _XFA_TEXTPIECE : public CFX_Target {
+ FX_WCHAR* pszText;
+ int32_t iChars;
+ int32_t* pWidths;
+ int32_t iHorScale;
+ int32_t iVerScale;
+ int32_t iBidiLevel;
+ int32_t iUnderline;
+ int32_t iPeriod;
+ int32_t iLineThrough;
+ IFX_Font* pFont;
+ FX_ARGB dwColor;
+ FX_FLOAT fFontSize;
+ CFX_RectF rtPiece;
+ CXFA_LinkUserData* pLinkData;
+
+ _XFA_TEXTPIECE() : pszText(NULL), pFont(NULL), pLinkData(NULL) {
+ pszText = NULL;
+ }
+ ~_XFA_TEXTPIECE() {
+ pszText = NULL;
+ if (NULL != pLinkData) {
+ pLinkData->Release();
+ pLinkData = NULL;
+ }
+ }
+} XFA_TEXTPIECE, *XFA_LPTEXTPIECE;
+typedef XFA_TEXTPIECE const* XFA_LPCTEXTPIECE;
+typedef CFX_ArrayTemplate<XFA_LPTEXTPIECE> CXFA_PieceArray;
+class CXFA_PieceLine : public CFX_Target {
+ public:
+ CXFA_PieceLine() {}
+ CXFA_PieceArray m_textPieces;
+ CFX_Int32Array m_charCounts;
+};
+typedef CFX_ArrayTemplate<CXFA_PieceLine*> CXFA_PieceLineArray;
+struct XFA_TABSTOPS {
+ FX_DWORD dwAlign;
+ FX_FLOAT fTabstops;
+};
+class CXFA_TextTabstopsContext {
+ public:
+ CXFA_TextTabstopsContext()
+ : m_iTabCount(0),
+ m_iTabIndex(-1),
+ m_bTabstops(FALSE),
+ m_fTabWidth(0),
+ m_fLeft(0) {}
+ void Append(FX_DWORD dwAlign, FX_FLOAT fTabstops) {
+ int32_t i = 0;
+ for (i = 0; i < m_iTabCount; i++) {
+ XFA_TABSTOPS* pTabstop = m_tabstops.GetDataPtr(i);
+ if (fTabstops < pTabstop->fTabstops) {
+ break;
+ }
+ }
+ m_tabstops.InsertSpaceAt(i, 1);
+ XFA_TABSTOPS tabstop;
+ tabstop.dwAlign = dwAlign;
+ tabstop.fTabstops = fTabstops;
+ m_tabstops.SetAt(i, tabstop);
+ m_iTabCount++;
+ }
+ void RemoveAll() {
+ m_tabstops.RemoveAll();
+ m_iTabCount = 0;
+ }
+ void Reset() {
+ m_iTabIndex = -1;
+ m_bTabstops = FALSE;
+ m_fTabWidth = 0;
+ m_fLeft = 0;
+ }
+ CFX_ArrayTemplate<XFA_TABSTOPS> m_tabstops;
+ int32_t m_iTabCount;
+ int32_t m_iTabIndex;
+ FX_BOOL m_bTabstops;
+ FX_FLOAT m_fTabWidth;
+ FX_FLOAT m_fLeft;
+};
+class CXFA_TextLayout {
+ public:
+ CXFA_TextLayout(IXFA_TextProvider* pTextProvider);
+ virtual ~CXFA_TextLayout();
+ int32_t GetText(CFX_WideString& wsText);
+ FX_FLOAT GetLayoutHeight();
+ FX_FLOAT StartLayout(FX_FLOAT fWidth = -1);
+ FX_BOOL DoLayout(int32_t iBlockIndex,
+ FX_FLOAT& fCalcHeight,
+ FX_FLOAT fContentAreaHeight = -1,
+ FX_FLOAT fTextHeight = -1);
+
+ FX_BOOL CalcSize(const CFX_SizeF& minSize,
+ const CFX_SizeF& maxSize,
+ CFX_SizeF& defaultSize);
+ FX_BOOL Layout(const CFX_SizeF& size, FX_FLOAT* fHeight = NULL);
+ void ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex);
+ FX_BOOL DrawString(CFX_RenderDevice* pFxDevice,
+ const CFX_Matrix& tmDoc2Device,
+ const CFX_RectF& rtClip,
+ int32_t iBlock = 0);
+ FX_BOOL IsLoaded() const { return m_pieceLines.GetSize() > 0; }
+ void Unload();
+ const CXFA_PieceLineArray* GetPieceLines();
+
+ FX_BOOL m_bHasBlock;
+ CFX_Int32Array m_Blocks;
+
+ private:
+ void GetTextDataNode();
+ IFDE_XMLNode* GetXMLContainerNode();
+ IFX_RTFBreak* CreateBreak(FX_BOOL bDefault);
+ void InitBreak(FX_FLOAT fLineWidth);
+ void InitBreak(IFDE_CSSComputedStyle* pStyle,
+ FDE_CSSDISPLAY eDisplay,
+ FX_FLOAT fLineWidth,
+ IFDE_XMLNode* pXMLNode,
+ IFDE_CSSComputedStyle* pParentStyle = NULL);
+ FX_BOOL Loader(const CFX_SizeF& szText,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces = TRUE);
+ void LoadText(CXFA_Node* pNode,
+ const CFX_SizeF& szText,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces);
+ FX_BOOL LoadRichText(IFDE_XMLNode* pXMLNode,
+ const CFX_SizeF& szText,
+ FX_FLOAT& fLinePos,
+ IFDE_CSSComputedStyle* pParentStyle,
+ FX_BOOL bSavePieces,
+ CXFA_LinkUserData* pLinkData = NULL,
+ FX_BOOL bEndBreak = TRUE,
+ FX_BOOL bIsOl = FALSE,
+ int32_t iLiCount = 0);
+ FX_BOOL AppendChar(const CFX_WideString& wsText,
+ FX_FLOAT& fLinePos,
+ FX_FLOAT fSpaceAbove,
+ FX_BOOL bSavePieces);
+ void AppendTextLine(FX_DWORD dwStatus,
+ FX_FLOAT& fLinePos,
+ FX_BOOL bSavePieces,
+ FX_BOOL bEndBreak = FALSE);
+ void EndBreak(FX_DWORD dwStatus, FX_FLOAT& fLinePos, FX_BOOL bDefault);
+ FX_BOOL IsEnd(FX_BOOL bSavePieces);
+ void ProcessText(CFX_WideString& wsText);
+ void UpdateAlign(FX_FLOAT fHeight, FX_FLOAT fBottom);
+ void RenderString(IFDE_RenderDevice* pDevice,
+ IFDE_SolidBrush* pBrush,
+ CXFA_PieceLine* pPieceLine,
+ int32_t iPiece,
+ FXTEXT_CHARPOS* pCharPos,
+ const CFX_Matrix& tmDoc2Device);
+ void RenderPath(IFDE_RenderDevice* pDevice,
+ IFDE_Pen* pPen,
+ CXFA_PieceLine* pPieceLine,
+ int32_t iPiece,
+ FXTEXT_CHARPOS* pCharPos,
+ const CFX_Matrix& tmDoc2Device);
+ int32_t GetDisplayPos(XFA_LPCTEXTPIECE pPiece,
+ FXTEXT_CHARPOS* pCharPos,
+ FX_BOOL bCharCode = FALSE);
+ FX_BOOL ToRun(XFA_LPCTEXTPIECE pPiece, FX_RTFTEXTOBJ& tr);
+ void DoTabstops(IFDE_CSSComputedStyle* pStyle, CXFA_PieceLine* pPieceLine);
+ FX_BOOL Layout(int32_t iBlock);
+ int32_t CountBlocks() const;
+
+ IXFA_TextProvider* m_pTextProvider;
+ CXFA_Node* m_pTextDataNode;
+ FX_BOOL m_bRichText;
+ IFX_MEMAllocator* m_pAllocator;
+ IFX_RTFBreak* m_pBreak;
+ CXFA_LoaderContext* m_pLoader;
+ int32_t m_iLines;
+ FX_FLOAT m_fMaxWidth;
+ CXFA_TextParser m_textParser;
+ CXFA_PieceLineArray m_pieceLines;
+ CXFA_TextTabstopsContext* m_pTabstopContext;
+ FX_BOOL m_bBlockContinue;
+};
+#endif