fx_ge.cpp revision e6986e1e8d4a57987f47c215490cb080a65ee29a
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