1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #include "core/fpdfapi/page/cpdf_pagemodule.h"
8 
9 #include "core/fpdfapi/font/cpdf_fontglobals.h"
10 #include "core/fpdfapi/page/cpdf_colorspace.h"
11 #include "core/fpdfapi/page/cpdf_devicecs.h"
12 #include "core/fpdfapi/page/cpdf_patterncs.h"
13 #include "core/fxcodec/fx_codec.h"
14 
15 namespace {
16 
17 CPDF_PageModule* g_PageModule = nullptr;
18 
19 }  // namespace
20 
21 // static
Create()22 void CPDF_PageModule::Create() {
23   ASSERT(!g_PageModule);
24   fxcodec::ModuleMgr::Create();
25   g_PageModule = new CPDF_PageModule();
26 }
27 
28 // static
Destroy()29 void CPDF_PageModule::Destroy() {
30   ASSERT(g_PageModule);
31   delete g_PageModule;
32   g_PageModule = nullptr;
33   fxcodec::ModuleMgr::Destroy();
34 }
35 
36 // static
GetInstance()37 CPDF_PageModule* CPDF_PageModule::GetInstance() {
38   ASSERT(g_PageModule);
39   return g_PageModule;
40 }
41 
CPDF_PageModule()42 CPDF_PageModule::CPDF_PageModule()
43     : m_StockGrayCS(pdfium::MakeRetain<CPDF_DeviceCS>(PDFCS_DEVICEGRAY)),
44       m_StockRGBCS(pdfium::MakeRetain<CPDF_DeviceCS>(PDFCS_DEVICERGB)),
45       m_StockCMYKCS(pdfium::MakeRetain<CPDF_DeviceCS>(PDFCS_DEVICECMYK)),
46       m_StockPatternCS(pdfium::MakeRetain<CPDF_PatternCS>(nullptr)) {
47   m_StockPatternCS->InitializeStockPattern();
48   CPDF_FontGlobals::Create();
49   CPDF_FontGlobals::GetInstance()->LoadEmbeddedMaps();
50 }
51 
~CPDF_PageModule()52 CPDF_PageModule::~CPDF_PageModule() {
53   CPDF_FontGlobals::Destroy();
54 }
55 
GetStockCS(int family)56 RetainPtr<CPDF_ColorSpace> CPDF_PageModule::GetStockCS(int family) {
57   if (family == PDFCS_DEVICEGRAY)
58     return m_StockGrayCS;
59   if (family == PDFCS_DEVICERGB)
60     return m_StockRGBCS;
61   if (family == PDFCS_DEVICECMYK)
62     return m_StockCMYKCS;
63   if (family == PDFCS_PATTERN)
64     return m_StockPatternCS;
65   return nullptr;
66 }
67 
ClearStockFont(CPDF_Document * pDoc)68 void CPDF_PageModule::ClearStockFont(CPDF_Document* pDoc) {
69   CPDF_FontGlobals::GetInstance()->Clear(pDoc);
70 }
71