Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Side by Side Diff: core/fpdfdoc/cpvt_generateap.cpp

Issue 2419173002: Update CPDF_IndirectObjectHolder APIs for unique objects (Closed)
Patch Set: Fix issues Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fpdfdoc/cpvt_fontmap.cpp ('k') | fpdfsdk/cpdfsdk_baannot.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "core/fpdfdoc/cpvt_generateap.h" 7 #include "core/fpdfdoc/cpvt_generateap.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 CPDF_Dictionary* pDRDict = pFormDict->GetDictFor("DR"); 51 CPDF_Dictionary* pDRDict = pFormDict->GetDictFor("DR");
52 if (!pDRDict) 52 if (!pDRDict)
53 return false; 53 return false;
54 54
55 CPDF_Dictionary* pDRFontDict = pDRDict->GetDictFor("Font"); 55 CPDF_Dictionary* pDRFontDict = pDRDict->GetDictFor("Font");
56 if (!pDRFontDict) 56 if (!pDRFontDict)
57 return false; 57 return false;
58 58
59 CPDF_Dictionary* pFontDict = pDRFontDict->GetDictFor(sFontName.Mid(1)); 59 CPDF_Dictionary* pFontDict = pDRFontDict->GetDictFor(sFontName.Mid(1));
60 if (!pFontDict) { 60 if (!pFontDict) {
61 pFontDict = new CPDF_Dictionary(pDoc->GetByteStringPool()); 61 pFontDict = pDoc->AddIndirectDictionary(pDoc->GetByteStringPool());
62 pFontDict->SetNameFor("Type", "Font"); 62 pFontDict->SetNameFor("Type", "Font");
63 pFontDict->SetNameFor("Subtype", "Type1"); 63 pFontDict->SetNameFor("Subtype", "Type1");
64 pFontDict->SetNameFor("BaseFont", "Helvetica"); 64 pFontDict->SetNameFor("BaseFont", "Helvetica");
65 pFontDict->SetNameFor("Encoding", "WinAnsiEncoding"); 65 pFontDict->SetNameFor("Encoding", "WinAnsiEncoding");
66 pDRFontDict->SetReferenceFor(sFontName.Mid(1), pDoc, 66 pDRFontDict->SetReferenceFor(sFontName.Mid(1), pDoc, pFontDict);
67 pDoc->AddIndirectObject(pFontDict));
68 } 67 }
69 CPDF_Font* pDefFont = pDoc->LoadFont(pFontDict); 68 CPDF_Font* pDefFont = pDoc->LoadFont(pFontDict);
70 if (!pDefFont) 69 if (!pDefFont)
71 return false; 70 return false;
72 71
73 CFX_FloatRect rcAnnot = pAnnotDict->GetRectFor("Rect"); 72 CFX_FloatRect rcAnnot = pAnnotDict->GetRectFor("Rect");
74 int32_t nRotate = 0; 73 int32_t nRotate = 0;
75 if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK")) 74 if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK"))
76 nRotate = pMKDict->GetIntegerFor("R"); 75 nRotate = pMKDict->GetIntegerFor("R");
77 76
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 CFX_FloatRect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth, 160 CFX_FloatRect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth,
162 rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth); 161 rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth);
163 rcBody.Normalize(); 162 rcBody.Normalize();
164 CPDF_Dictionary* pAPDict = pAnnotDict->GetDictFor("AP"); 163 CPDF_Dictionary* pAPDict = pAnnotDict->GetDictFor("AP");
165 if (!pAPDict) { 164 if (!pAPDict) {
166 pAPDict = new CPDF_Dictionary(pDoc->GetByteStringPool()); 165 pAPDict = new CPDF_Dictionary(pDoc->GetByteStringPool());
167 pAnnotDict->SetFor("AP", pAPDict); 166 pAnnotDict->SetFor("AP", pAPDict);
168 } 167 }
169 CPDF_Stream* pNormalStream = pAPDict->GetStreamFor("N"); 168 CPDF_Stream* pNormalStream = pAPDict->GetStreamFor("N");
170 if (!pNormalStream) { 169 if (!pNormalStream) {
171 pNormalStream = new CPDF_Stream; 170 pNormalStream = pDoc->AddIndirectStream();
172 pAPDict->SetReferenceFor("N", pDoc, pDoc->AddIndirectObject(pNormalStream)); 171 pAPDict->SetReferenceFor("N", pDoc, pNormalStream);
173 } 172 }
174 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); 173 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict();
175 if (pStreamDict) { 174 if (pStreamDict) {
176 pStreamDict->SetMatrixFor("Matrix", matrix); 175 pStreamDict->SetMatrixFor("Matrix", matrix);
177 pStreamDict->SetRectFor("BBox", rcBBox); 176 pStreamDict->SetRectFor("BBox", rcBBox);
178 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); 177 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources");
179 if (pStreamResList) { 178 if (pStreamResList) {
180 CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictFor("Font"); 179 CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictFor("Font");
181 if (!pStreamResFontList) { 180 if (!pStreamResFontList) {
182 pStreamResFontList = new CPDF_Dictionary(pDoc->GetByteStringPool()); 181 pStreamResFontList = new CPDF_Dictionary(pDoc->GetByteStringPool());
183 pStreamResList->SetFor("Font", pStreamResFontList); 182 pStreamResList->SetFor("Font", pStreamResFontList);
184 } 183 }
185 if (!pStreamResFontList->KeyExist(sFontName)) 184 if (!pStreamResFontList->KeyExist(sFontName))
186 pStreamResFontList->SetReferenceFor(sFontName, pDoc, 185 pStreamResFontList->SetReferenceFor(sFontName, pDoc, pFontDict);
187 pFontDict->GetObjNum());
188 } else { 186 } else {
189 pStreamDict->SetFor("Resources", pFormDict->GetDictFor("DR")->Clone()); 187 pStreamDict->SetFor("Resources", pFormDict->GetDictFor("DR")->Clone());
190 pStreamResList = pStreamDict->GetDictFor("Resources"); 188 pStreamResList = pStreamDict->GetDictFor("Resources");
191 } 189 }
192 } 190 }
193 switch (nWidgetType) { 191 switch (nWidgetType) {
194 case 0: { 192 case 0: {
195 CFX_WideString swValue = 193 CFX_WideString swValue =
196 FPDF_GetFieldAttr(pAnnotDict, "V") 194 FPDF_GetFieldAttr(pAnnotDict, "V")
197 ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() 195 ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText()
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 pStreamDict->SetRectFor("BBox", rcBBox); 425 pStreamDict->SetRectFor("BBox", rcBBox);
428 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); 426 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources");
429 if (pStreamResList) { 427 if (pStreamResList) {
430 CPDF_Dictionary* pStreamResFontList = 428 CPDF_Dictionary* pStreamResFontList =
431 pStreamResList->GetDictFor("Font"); 429 pStreamResList->GetDictFor("Font");
432 if (!pStreamResFontList) { 430 if (!pStreamResFontList) {
433 pStreamResFontList = new CPDF_Dictionary(pDoc->GetByteStringPool()); 431 pStreamResFontList = new CPDF_Dictionary(pDoc->GetByteStringPool());
434 pStreamResList->SetFor("Font", pStreamResFontList); 432 pStreamResList->SetFor("Font", pStreamResFontList);
435 } 433 }
436 if (!pStreamResFontList->KeyExist(sFontName)) 434 if (!pStreamResFontList->KeyExist(sFontName))
437 pStreamResFontList->SetReferenceFor(sFontName, pDoc, 435 pStreamResFontList->SetReferenceFor(sFontName, pDoc, pFontDict);
438 pFontDict->GetObjNum());
439 } else { 436 } else {
440 pStreamDict->SetFor("Resources", pFormDict->GetDictFor("DR")->Clone()); 437 pStreamDict->SetFor("Resources", pFormDict->GetDictFor("DR")->Clone());
441 pStreamResList = pStreamDict->GetDictFor("Resources"); 438 pStreamResList = pStreamDict->GetDictFor("Resources");
442 } 439 }
443 } 440 }
444 } 441 }
445 return true; 442 return true;
446 } 443 }
447 444
448 CFX_ByteString GetColorStringWithDefault(CPDF_Array* pColor, 445 CFX_ByteString GetColorStringWithDefault(CPDF_Array* pColor,
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 pGSDict->SetStringFor("BM", sBlendMode); 549 pGSDict->SetStringFor("BM", sBlendMode);
553 550
554 CPDF_Dictionary* pExtGStateDict = 551 CPDF_Dictionary* pExtGStateDict =
555 new CPDF_Dictionary(pAnnotDict.GetByteStringPool()); 552 new CPDF_Dictionary(pAnnotDict.GetByteStringPool());
556 pExtGStateDict->SetFor(sExtGSDictName, pGSDict); 553 pExtGStateDict->SetFor(sExtGSDictName, pGSDict);
557 return pExtGStateDict; 554 return pExtGStateDict;
558 } 555 }
559 556
560 CPDF_Dictionary* GenerateResourceFontDict(CPDF_Document* pDoc, 557 CPDF_Dictionary* GenerateResourceFontDict(CPDF_Document* pDoc,
561 const CFX_ByteString& sFontDictName) { 558 const CFX_ByteString& sFontDictName) {
562 CPDF_Dictionary* pFontDict = new CPDF_Dictionary(pDoc->GetByteStringPool()); 559 CPDF_Dictionary* pFontDict =
560 pDoc->AddIndirectDictionary(pDoc->GetByteStringPool());
563 pFontDict->SetNameFor("Type", "Font"); 561 pFontDict->SetNameFor("Type", "Font");
564 pFontDict->SetNameFor("Subtype", "Type1"); 562 pFontDict->SetNameFor("Subtype", "Type1");
565 pFontDict->SetNameFor("BaseFont", "Helvetica"); 563 pFontDict->SetNameFor("BaseFont", "Helvetica");
566 pFontDict->SetNameFor("Encoding", "WinAnsiEncoding"); 564 pFontDict->SetNameFor("Encoding", "WinAnsiEncoding");
567 565
568 CPDF_Dictionary* pResourceFontDict = 566 CPDF_Dictionary* pResourceFontDict =
569 new CPDF_Dictionary(pDoc->GetByteStringPool()); 567 new CPDF_Dictionary(pDoc->GetByteStringPool());
570 pResourceFontDict->SetReferenceFor(sFontDictName, pDoc, 568 pResourceFontDict->SetReferenceFor(sFontDictName, pDoc, pFontDict);
571 pDoc->AddIndirectObject(pFontDict));
572 return pResourceFontDict; 569 return pResourceFontDict;
573 } 570 }
574 571
575 // Takes ownership of |pExtGStateDict| and |pResourceFontDict|. 572 // Takes ownership of |pExtGStateDict| and |pResourceFontDict|.
576 CPDF_Dictionary* GenerateResourceDict(CPDF_Document* pDoc, 573 CPDF_Dictionary* GenerateResourceDict(CPDF_Document* pDoc,
577 CPDF_Dictionary* pExtGStateDict, 574 CPDF_Dictionary* pExtGStateDict,
578 CPDF_Dictionary* pResourceFontDict) { 575 CPDF_Dictionary* pResourceFontDict) {
579 CPDF_Dictionary* pResourceDict = 576 CPDF_Dictionary* pResourceDict =
580 new CPDF_Dictionary(pDoc->GetByteStringPool()); 577 new CPDF_Dictionary(pDoc->GetByteStringPool());
581 if (pExtGStateDict) 578 if (pExtGStateDict)
582 pResourceDict->SetFor("ExtGState", pExtGStateDict); 579 pResourceDict->SetFor("ExtGState", pExtGStateDict);
583 580
584 if (pResourceFontDict) 581 if (pResourceFontDict)
585 pResourceDict->SetFor("Font", pResourceFontDict); 582 pResourceDict->SetFor("Font", pResourceFontDict);
586 583
587 return pResourceDict; 584 return pResourceDict;
588 } 585 }
589 586
590 // Takes ownership of |pResourceDict|. 587 // Takes ownership of |pResourceDict|.
591 void GenerateAndSetAPDict(CPDF_Document* pDoc, 588 void GenerateAndSetAPDict(CPDF_Document* pDoc,
592 CPDF_Dictionary* pAnnotDict, 589 CPDF_Dictionary* pAnnotDict,
593 const CFX_ByteTextBuf& sAppStream, 590 const CFX_ByteTextBuf& sAppStream,
594 CPDF_Dictionary* pResourceDict, 591 CPDF_Dictionary* pResourceDict,
595 bool bIsTextMarkupAnnotation) { 592 bool bIsTextMarkupAnnotation) {
596 CPDF_Dictionary* pAPDict = new CPDF_Dictionary(pDoc->GetByteStringPool()); 593 CPDF_Dictionary* pAPDict = new CPDF_Dictionary(pDoc->GetByteStringPool());
597 pAnnotDict->SetFor("AP", pAPDict); 594 pAnnotDict->SetFor("AP", pAPDict);
598 595
599 CPDF_Stream* pNormalStream = new CPDF_Stream; 596 CPDF_Stream* pNormalStream = pDoc->AddIndirectStream();
600 pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize()); 597 pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize());
601 pAPDict->SetReferenceFor("N", pDoc, pDoc->AddIndirectObject(pNormalStream)); 598 pAPDict->SetReferenceFor("N", pDoc, pNormalStream);
602 599
603 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); 600 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict();
604 pStreamDict->SetIntegerFor("FormType", 1); 601 pStreamDict->SetIntegerFor("FormType", 1);
605 pStreamDict->SetStringFor("Subtype", "Form"); 602 pStreamDict->SetStringFor("Subtype", "Form");
606 pStreamDict->SetMatrixFor("Matrix", CFX_Matrix()); 603 pStreamDict->SetMatrixFor("Matrix", CFX_Matrix());
607 604
608 CFX_FloatRect rect = bIsTextMarkupAnnotation 605 CFX_FloatRect rect = bIsTextMarkupAnnotation
609 ? CPDF_Annot::RectFromQuadPoints(pAnnotDict) 606 ? CPDF_Annot::RectFromQuadPoints(pAnnotDict)
610 : pAnnotDict->GetRectFor("Rect"); 607 : pAnnotDict->GetRectFor("Rect");
611 pStreamDict->SetRectFor("BBox", rect); 608 pStreamDict->SetRectFor("BBox", rect);
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 int32_t nFontIndex, 1350 int32_t nFontIndex,
1354 FX_FLOAT fFontSize) { 1351 FX_FLOAT fFontSize) {
1355 CFX_ByteTextBuf sRet; 1352 CFX_ByteTextBuf sRet;
1356 if (pFontMap) { 1353 if (pFontMap) {
1357 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); 1354 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
1358 if (sFontAlias.GetLength() > 0 && fFontSize > 0) 1355 if (sFontAlias.GetLength() > 0 && fFontSize > 0)
1359 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; 1356 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
1360 } 1357 }
1361 return sRet.MakeString(); 1358 return sRet.MakeString();
1362 } 1359 }
OLDNEW
« no previous file with comments | « core/fpdfdoc/cpvt_fontmap.cpp ('k') | fpdfsdk/cpdfsdk_baannot.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698