1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <algorithm>
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h"
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_common.h"
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdochandler.h"
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_fwladapter.h"
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdoc.h"
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffapp.h"
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_fwltheme.h"
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_fontmgr.h"
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffwidgethandler.h"
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FileRead::CXFA_FileRead(const CFX_ArrayTemplate<CPDF_Stream*>& streams) {
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iCount = streams.GetSize();
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < iCount; i++) {
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_StreamAcc& acc = m_Data.Add();
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    acc.LoadAllData(streams[i]);
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FILESIZE CXFA_FileRead::GetSize() {
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD dwSize = 0;
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iCount = m_Data.GetSize();
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < iCount; i++) {
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_StreamAcc& acc = m_Data[i];
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    dwSize += acc.GetSize();
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return dwSize;
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FileRead::ReadBlock(void* buffer,
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 FX_FILESIZE offset,
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 size_t size) {
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iCount = m_Data.GetSize();
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t index = 0;
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (index < iCount) {
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_StreamAcc& acc = m_Data[index];
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FILESIZE dwSize = acc.GetSize();
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (offset < dwSize) {
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    offset -= dwSize;
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    index++;
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (index < iCount) {
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CPDF_StreamAcc& acc = m_Data[index];
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_DWORD dwSize = acc.GetSize();
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    size_t dwRead = std::min(size, static_cast<size_t>(dwSize - offset));
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FXSYS_memcpy(buffer, acc.GetData() + offset, dwRead);
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    size -= dwRead;
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (size == 0) {
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return TRUE;
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    buffer = (uint8_t*)buffer + dwRead;
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    offset = 0;
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    index++;
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// static
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_App* IXFA_App::Create(IXFA_AppProvider* pProvider) {
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return new CXFA_FFApp(pProvider);
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// virtual
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_App::~IXFA_App() {}
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFApp::CXFA_FFApp(IXFA_AppProvider* pProvider)
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : m_pDocHandler(nullptr),
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFWLTheme(nullptr),
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pProvider(pProvider),
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFontMgr(nullptr),
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFontSource(nullptr),
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pAdapterWidgetMgr(nullptr),
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pWidgetMgrDelegate(nullptr),
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFDEFontMgr(nullptr),
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pMenuHandler(nullptr),
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pAdapterThreadMgr(nullptr) {
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pFWLApp = IFWL_App::Create(this);
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FWL_SetApp(m_pFWLApp);
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pFWLApp->Initialize();
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_TimeZoneProvider::Create();
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFApp::~CXFA_FFApp() {
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pDocHandler) {
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_pDocHandler;
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFWLApp) {
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFWLApp->Finalize();
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFWLApp->Release();
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_pFWLApp;
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFWLTheme) {
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFWLTheme->Release();
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pAdapterWidgetMgr) {
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_pAdapterWidgetMgr;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pAdapterThreadMgr) {
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_pAdapterThreadMgr;
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pAdapterThreadMgr = NULL;
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pMenuHandler) {
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_pMenuHandler;
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pMenuHandler = NULL;
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_TimeZoneProvider::Destroy();
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFontMgr != NULL) {
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete m_pFontMgr;
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFontMgr = NULL;
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFontSource != NULL) {
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFontSource->Release();
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFDEFontMgr) {
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFDEFontMgr->Release();
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_MenuHandler* CXFA_FFApp::GetMenuHandler() {
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pMenuHandler) {
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pMenuHandler = new CXFA_FFMenuHandler;
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pMenuHandler;
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_DocHandler* CXFA_FFApp::GetDocHandler() {
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pDocHandler) {
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pDocHandler = new CXFA_FFDocHandler;
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pDocHandler;
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider,
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                IFX_FileRead* pStream,
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                FX_BOOL bTakeOverFile) {
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider);
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bSuccess = pDoc->OpenDoc(pStream, bTakeOverFile);
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bSuccess) {
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete pDoc;
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pDoc = NULL;
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pDoc;
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_Doc* CXFA_FFApp::CreateDoc(IXFA_DocProvider* pProvider,
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                CPDF_Document* pPDFDoc) {
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pPDFDoc == NULL) {
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return NULL;
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_FFDoc* pDoc = new CXFA_FFDoc(this, pProvider);
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bSuccess = pDoc->OpenDoc(pPDFDoc);
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bSuccess) {
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete pDoc;
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pDoc = NULL;
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pDoc;
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFApp::SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) {
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pFontMgr) {
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFontMgr = new CXFA_FontMgr();
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pFontMgr->SetDefFontMgr(pFontMgr);
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FontMgr* CXFA_FFApp::GetXFAFontMgr() {
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pFontMgr;
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFX_FontMgr* CXFA_FFApp::GetFDEFontMgr() {
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pFDEFontMgr) {
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFDEFontMgr = IFX_FontMgr::Create(FX_GetDefFontEnumerator());
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFontSource = FX_CreateDefaultFontSourceEnum();
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFDEFontMgr = IFX_FontMgr::Create(m_pFontSource);
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pFDEFontMgr;
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FWLTheme* CXFA_FFApp::GetFWLTheme() {
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pFWLTheme) {
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFWLTheme = new CXFA_FWLTheme(this);
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pFWLTheme;
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFWL_AdapterWidgetMgr* CXFA_FFApp::GetWidgetMgr(
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IFWL_WidgetMgrDelegate* pDelegate) {
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pAdapterWidgetMgr) {
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pAdapterWidgetMgr = new CXFA_FWLAdapterWidgetMgr;
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pDelegate->OnSetCapability(FWL_WGTMGR_DisableThread |
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               FWL_WGTMGR_DisableForm);
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pWidgetMgrDelegate = pDelegate;
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pAdapterWidgetMgr;
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFWL_AdapterThreadMgr* CXFA_FFApp::GetThreadMgr() {
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pAdapterThreadMgr) {
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pAdapterThreadMgr = new CFWL_SDAdapterThreadMgr;
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pAdapterThreadMgr;
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFWL_AdapterTimerMgr* CXFA_FFApp::GetTimerMgr() {
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pProvider->GetTimerMgr();
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFWL_AdapterCursorMgr* CXFA_FFApp::GetCursorMgr() {
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFWL_AdapterMonitorMgr* CXFA_FFApp::GetMonitorMgr() {
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIFWL_AdapterClipboardMgr* CXFA_FFApp::GetClipboardMgr() {
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
216