summaryrefslogtreecommitdiff
path: root/core/fpdfapi/edit
diff options
context:
space:
mode:
authorNicolas Pena <npm@chromium.org>2017-02-15 16:26:48 -0500
committerChromium commit bot <commit-bot@chromium.org>2017-02-15 23:35:50 +0000
commita4ad01fe03ffdd1806d31a9d7bb820f6a69a0afb (patch)
tree346da436a6382e1509e84cbdaf1b622035a97f32 /core/fpdfapi/edit
parentf7fddc9325da53c861aa4f2a7c0139b39bc1da60 (diff)
downloadpdfium-a4ad01fe03ffdd1806d31a9d7bb820f6a69a0afb.tar.xz
Move generated graphics and font maps to CPDF_Page
A new CPDF_PageContentGenerator is created for every call of FPDFPage_GenerateContent, so having the maps there will cause duplicated resources to be created every time this method is called. Thus it is better to move these to the page. Change-Id: I47804f79790fc5354f8a94b6387d66b65eda5a20 Reviewed-on: https://pdfium-review.googlesource.com/2717 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Nicolás Peña <npm@chromium.org>
Diffstat (limited to 'core/fpdfapi/edit')
-rw-r--r--core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp24
-rw-r--r--core/fpdfapi/edit/cpdf_pagecontentgenerator.h14
2 files changed, 6 insertions, 32 deletions
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index ff8b676de1..b5fe4c0f35 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -222,8 +222,8 @@ void CPDF_PageContentGenerator::ProcessGraphics(CFX_ByteTextBuf* buf,
return;
CFX_ByteString name;
- auto it = m_GraphicsMap.find(graphD);
- if (it != m_GraphicsMap.end()) {
+ auto it = m_pPage->m_GraphicsMap.find(graphD);
+ if (it != m_pPage->m_GraphicsMap.end()) {
name = it->second;
} else {
auto gsDict = pdfium::MakeUnique<CPDF_Dictionary>();
@@ -232,23 +232,11 @@ void CPDF_PageContentGenerator::ProcessGraphics(CFX_ByteTextBuf* buf,
CPDF_Object* pDict = m_pDocument->AddIndirectObject(std::move(gsDict));
uint32_t dwObjNum = pDict->GetObjNum();
name = RealizeResource(dwObjNum, "ExtGState");
- m_GraphicsMap[graphD] = name;
+ m_pPage->m_GraphicsMap[graphD] = name;
}
*buf << "/" << PDF_NameEncode(name) << " gs ";
}
-bool CPDF_PageContentGenerator::GraphicsData::operator<(
- const GraphicsData& other) const {
- if (fillAlpha != other.fillAlpha)
- return fillAlpha < other.fillAlpha;
- return strokeAlpha < other.strokeAlpha;
-}
-
-bool CPDF_PageContentGenerator::FontData::operator<(
- const FontData& other) const {
- return baseFont < other.baseFont;
-}
-
// This method adds text to the buffer, BT begins the text object, ET ends it.
// Tm sets the text matrix (allows positioning and transforming text).
// Tf sets the font name (from Font in Resources) and font size.
@@ -262,9 +250,9 @@ void CPDF_PageContentGenerator::ProcessText(CFX_ByteTextBuf* buf,
pFont = CPDF_Font::GetStockFont(m_pDocument, "Helvetica");
FontData fontD;
fontD.baseFont = pFont->GetBaseFont();
- auto it = m_FontsMap.find(fontD);
+ auto it = m_pPage->m_FontsMap.find(fontD);
CFX_ByteString dictName;
- if (it != m_FontsMap.end()) {
+ if (it != m_pPage->m_FontsMap.end()) {
dictName = it->second;
} else {
auto fontDict = pdfium::MakeUnique<CPDF_Dictionary>();
@@ -274,7 +262,7 @@ void CPDF_PageContentGenerator::ProcessText(CFX_ByteTextBuf* buf,
CPDF_Object* pDict = m_pDocument->AddIndirectObject(std::move(fontDict));
uint32_t dwObjNum = pDict->GetObjNum();
dictName = RealizeResource(dwObjNum, "Font");
- m_FontsMap[fontD] = dictName;
+ m_pPage->m_FontsMap[fontD] = dictName;
}
*buf << "/" << PDF_NameEncode(dictName) << " " << pTextObj->GetFontSize()
<< " Tf ";
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.h b/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
index fd80bd8f44..73e75187e4 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
@@ -7,7 +7,6 @@
#ifndef CORE_FPDFAPI_EDIT_CPDF_PAGECONTENTGENERATOR_H_
#define CORE_FPDFAPI_EDIT_CPDF_PAGECONTENTGENERATOR_H_
-#include <map>
#include <vector>
#include "core/fxcrt/fx_basic.h"
@@ -37,19 +36,6 @@ class CPDF_PageContentGenerator {
CFX_ByteString RealizeResource(uint32_t dwResourceObjNum,
const CFX_ByteString& bsType);
- struct GraphicsData {
- FX_FLOAT fillAlpha;
- FX_FLOAT strokeAlpha;
- bool operator<(const GraphicsData& other) const;
- };
-
- struct FontData {
- CFX_ByteString baseFont;
- bool operator<(const FontData& other) const;
- };
-
- std::map<GraphicsData, CFX_ByteString> m_GraphicsMap;
- std::map<FontData, CFX_ByteString> m_FontsMap;
CPDF_Page* const m_pPage;
CPDF_Document* const m_pDocument;
std::vector<CPDF_PageObject*> m_pageObjects;