1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../../include/fxge/fx_ge.h"
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "text_int.h"
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstatic CFX_GEModule* g_pGEModule = NULL;
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_GEModule::CFX_GEModule()
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pFontCache = NULL;
13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pFontMgr = NULL;
14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_FTLibrary = NULL;
15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pCodecModule = NULL;
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pPlatformData = NULL;
17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_GEModule::~CFX_GEModule()
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    if (m_pFontCache) {
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        delete m_pFontCache;
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pFontCache = NULL;
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    if (m_pFontMgr) {
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        delete m_pFontMgr;
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    m_pFontMgr = NULL;
28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    DestroyPlatform();
29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_GEModule* CFX_GEModule::Get()
31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    return g_pGEModule;
33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_GEModule::Create()
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    g_pGEModule = new CFX_GEModule;
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    g_pGEModule->m_pFontMgr = new CFX_FontMgr;
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    g_pGEModule->InitPlatform();
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    g_pGEModule->SetTextGamma(2.2f);
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_GEModule::Use(CFX_GEModule* pModule)
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    g_pGEModule = pModule;
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_GEModule::Destroy()
46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    if (g_pGEModule) {
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        delete g_pGEModule;
49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    g_pGEModule = NULL;
51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_FontCache* CFX_GEModule::GetFontCache()
53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    if (m_pFontCache == NULL) {
55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_pFontCache = new CFX_FontCache();
56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    return m_pFontCache;
58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_GEModule::SetTextGamma(FX_FLOAT gammaValue)
60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    gammaValue /= 2.2f;
62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    int i = 0;
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    while (i < 256) {
64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        m_GammaValue[i] = (FX_BYTE)(FXSYS_pow((FX_FLOAT)i / 255, gammaValue) * 255.0f + 0.5f);
65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        i++;
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_LPCBYTE CFX_GEModule::GetTextGammaTable()
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    return m_GammaValue;
71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_GEModule::SetExtFontMapper(IFX_FontMapper* pFontMapper)
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    GetFontMgr()->m_pExtMapper = pFontMapper;
75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    pFontMapper->m_pFontMgr = m_pFontMgr;
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
77