| Index: core/fpdfapi/render/fpdf_render.cpp
|
| diff --git a/core/fpdfapi/render/fpdf_render.cpp b/core/fpdfapi/render/fpdf_render.cpp
|
| index e4abb7e8329c1da3257731c8147864356f433d13..ca9e05917123bc2116e4bec3bad99e72b460e55b 100644
|
| --- a/core/fpdfapi/render/fpdf_render.cpp
|
| +++ b/core/fpdfapi/render/fpdf_render.cpp
|
| @@ -25,6 +25,7 @@
|
| #include "core/fpdfapi/parser/cpdf_array.h"
|
| #include "core/fpdfapi/parser/cpdf_dictionary.h"
|
| #include "core/fpdfapi/parser/cpdf_document.h"
|
| +#include "core/fpdfapi/render/cpdf_docrenderdata.h"
|
| #include "core/fpdfapi/render/cpdf_pagerendercache.h"
|
| #include "core/fpdfapi/render/cpdf_progressiverenderer.h"
|
| #include "core/fpdfapi/render/cpdf_renderoptions.h"
|
| @@ -36,60 +37,6 @@
|
| #include "core/fxge/cfx_pathdata.h"
|
| #include "core/fxge/cfx_renderdevice.h"
|
|
|
| -CPDF_DocRenderData::CPDF_DocRenderData(CPDF_Document* pPDFDoc)
|
| - : m_pPDFDoc(pPDFDoc) {}
|
| -
|
| -CPDF_DocRenderData::~CPDF_DocRenderData() {
|
| - Clear(true);
|
| -}
|
| -
|
| -void CPDF_DocRenderData::Clear(bool bRelease) {
|
| - for (auto it = m_Type3FaceMap.begin(); it != m_Type3FaceMap.end();) {
|
| - auto curr_it = it++;
|
| - CPDF_CountedObject<CPDF_Type3Cache>* cache = curr_it->second;
|
| - if (bRelease || cache->use_count() < 2) {
|
| - delete cache->get();
|
| - delete cache;
|
| - m_Type3FaceMap.erase(curr_it);
|
| - }
|
| - }
|
| -
|
| - for (auto it = m_TransferFuncMap.begin(); it != m_TransferFuncMap.end();) {
|
| - auto curr_it = it++;
|
| - CPDF_CountedObject<CPDF_TransferFunc>* value = curr_it->second;
|
| - if (bRelease || value->use_count() < 2) {
|
| - delete value->get();
|
| - delete value;
|
| - m_TransferFuncMap.erase(curr_it);
|
| - }
|
| - }
|
| -}
|
| -
|
| -CPDF_Type3Cache* CPDF_DocRenderData::GetCachedType3(CPDF_Type3Font* pFont) {
|
| - CPDF_CountedObject<CPDF_Type3Cache>* pCache;
|
| - auto it = m_Type3FaceMap.find(pFont);
|
| - if (it == m_Type3FaceMap.end()) {
|
| - CPDF_Type3Cache* pType3 = new CPDF_Type3Cache(pFont);
|
| - pCache = new CPDF_CountedObject<CPDF_Type3Cache>(pType3);
|
| - m_Type3FaceMap[pFont] = pCache;
|
| - } else {
|
| - pCache = it->second;
|
| - }
|
| - return pCache->AddRef();
|
| -}
|
| -
|
| -void CPDF_DocRenderData::ReleaseCachedType3(CPDF_Type3Font* pFont) {
|
| - auto it = m_Type3FaceMap.find(pFont);
|
| - if (it != m_Type3FaceMap.end()) {
|
| - it->second->RemoveRef();
|
| - if (it->second->use_count() < 2) {
|
| - delete it->second->get();
|
| - delete it->second;
|
| - m_Type3FaceMap.erase(it);
|
| - }
|
| - }
|
| -}
|
| -
|
| CPDF_RenderOptions::CPDF_RenderOptions()
|
| : m_ColorMode(RENDER_COLOR_NORMAL),
|
| m_Flags(RENDER_CLEARTYPE),
|
| @@ -1087,85 +1034,6 @@ void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) {
|
| }
|
| }
|
|
|
| -CPDF_TransferFunc* CPDF_DocRenderData::GetTransferFunc(CPDF_Object* pObj) {
|
| - if (!pObj)
|
| - return nullptr;
|
| -
|
| - auto it = m_TransferFuncMap.find(pObj);
|
| - if (it != m_TransferFuncMap.end()) {
|
| - CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter = it->second;
|
| - return pTransferCounter->AddRef();
|
| - }
|
| -
|
| - std::unique_ptr<CPDF_Function> pFuncs[3];
|
| - bool bUniTransfer = true;
|
| - bool bIdentity = true;
|
| - if (CPDF_Array* pArray = pObj->AsArray()) {
|
| - bUniTransfer = false;
|
| - if (pArray->GetCount() < 3)
|
| - return nullptr;
|
| -
|
| - for (uint32_t i = 0; i < 3; ++i) {
|
| - pFuncs[2 - i] = CPDF_Function::Load(pArray->GetDirectObjectAt(i));
|
| - if (!pFuncs[2 - i])
|
| - return nullptr;
|
| - }
|
| - } else {
|
| - pFuncs[0] = CPDF_Function::Load(pObj);
|
| - if (!pFuncs[0])
|
| - return nullptr;
|
| - }
|
| - CPDF_TransferFunc* pTransfer = new CPDF_TransferFunc(m_pPDFDoc);
|
| - CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter =
|
| - new CPDF_CountedObject<CPDF_TransferFunc>(pTransfer);
|
| - m_TransferFuncMap[pObj] = pTransferCounter;
|
| - static const int kMaxOutputs = 16;
|
| - FX_FLOAT output[kMaxOutputs];
|
| - FXSYS_memset(output, 0, sizeof(output));
|
| - FX_FLOAT input;
|
| - int noutput;
|
| - for (int v = 0; v < 256; ++v) {
|
| - input = (FX_FLOAT)v / 255.0f;
|
| - if (bUniTransfer) {
|
| - if (pFuncs[0] && pFuncs[0]->CountOutputs() <= kMaxOutputs)
|
| - pFuncs[0]->Call(&input, 1, output, noutput);
|
| - int o = FXSYS_round(output[0] * 255);
|
| - if (o != v)
|
| - bIdentity = false;
|
| - for (int i = 0; i < 3; ++i) {
|
| - pTransfer->m_Samples[i * 256 + v] = o;
|
| - }
|
| - } else {
|
| - for (int i = 0; i < 3; ++i) {
|
| - if (pFuncs[i] && pFuncs[i]->CountOutputs() <= kMaxOutputs) {
|
| - pFuncs[i]->Call(&input, 1, output, noutput);
|
| - int o = FXSYS_round(output[0] * 255);
|
| - if (o != v)
|
| - bIdentity = false;
|
| - pTransfer->m_Samples[i * 256 + v] = o;
|
| - } else {
|
| - pTransfer->m_Samples[i * 256 + v] = v;
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - pTransfer->m_bIdentity = bIdentity;
|
| - return pTransferCounter->AddRef();
|
| -}
|
| -
|
| -void CPDF_DocRenderData::ReleaseTransferFunc(CPDF_Object* pObj) {
|
| - auto it = m_TransferFuncMap.find(pObj);
|
| - if (it != m_TransferFuncMap.end()) {
|
| - it->second->RemoveRef();
|
| - if (it->second->use_count() < 2) {
|
| - delete it->second->get();
|
| - delete it->second;
|
| - m_TransferFuncMap.erase(it);
|
| - }
|
| - }
|
| -}
|
| -
|
| CPDF_DeviceBuffer::CPDF_DeviceBuffer()
|
| : m_pDevice(nullptr), m_pContext(nullptr), m_pObject(nullptr) {}
|
|
|
|
|