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

Side by Side Diff: core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp

Issue 1252613002: FX_BOOL considered harmful. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Manual edits. Created 5 years, 5 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
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 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 "../../../include/fpdfapi/fpdf_page.h" 7 #include "../../../include/fpdfapi/fpdf_page.h"
8 #include "../../../include/fpdfapi/fpdf_module.h" 8 #include "../../../include/fpdfapi/fpdf_module.h"
9 #include "../fpdf_page/pageint.h" 9 #include "../fpdf_page/pageint.h"
10 #include <limits.h> 10 #include <limits.h>
11 CPDF_Document::CPDF_Document() : CPDF_IndirectObjects(NULL) 11 CPDF_Document::CPDF_Document() : CPDF_IndirectObjects(NULL)
12 { 12 {
13 m_pRootDict = NULL; 13 m_pRootDict = NULL;
14 m_pInfoDict = NULL; 14 m_pInfoDict = NULL;
15 m_bLinearized = FALSE; 15 m_bLinearized = false;
16 m_dwFirstPageNo = 0; 16 m_dwFirstPageNo = 0;
17 m_dwFirstPageObjNum = 0; 17 m_dwFirstPageObjNum = 0;
18 m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this); 18 m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
19 m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this) ; 19 m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this) ;
20 } 20 }
21 void CPDF_Document::CreateNewDoc() 21 void CPDF_Document::CreateNewDoc()
22 { 22 {
23 ASSERT(m_pRootDict == NULL && m_pInfoDict == NULL); 23 ASSERT(m_pRootDict == NULL && m_pInfoDict == NULL);
24 m_pRootDict = new CPDF_Dictionary; 24 m_pRootDict = new CPDF_Dictionary;
25 m_pRootDict->SetAtName("Type", "Catalog"); 25 m_pRootDict->SetAtName("Type", "Catalog");
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 pWidthArray->AddInteger(*widths); 208 pWidthArray->AddInteger(*widths);
209 } else { 209 } else {
210 CPDF_Array* pWidthArray1 = new CPDF_Array; 210 CPDF_Array* pWidthArray1 = new CPDF_Array;
211 pWidthArray->Add(pWidthArray1); 211 pWidthArray->Add(pWidthArray1);
212 for (i = 0; i < size; i ++) { 212 for (i = 0; i < size; i ++) {
213 pWidthArray1->AddInteger(widths[i]); 213 pWidthArray1->AddInteger(widths[i]);
214 } 214 }
215 } 215 }
216 FX_Free(widths); 216 FX_Free(widths);
217 } 217 }
218 CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_B OOL bTranslateName) 218 CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTW* pLogFont, bool bVert, bool bT ranslateName)
219 { 219 {
220 LOGFONTA lfa; 220 LOGFONTA lfa;
221 FXSYS_memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa); 221 FXSYS_memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa);
222 CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName); 222 CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName);
223 if (face.GetLength() >= LF_FACESIZE) { 223 if (face.GetLength() >= LF_FACESIZE) {
224 return NULL; 224 return NULL;
225 } 225 }
226 FXSYS_strcpy(lfa.lfFaceName, face.c_str()); 226 FXSYS_strcpy(lfa.lfFaceName, face.c_str());
227 return AddWindowsFont(&lfa, bVert, bTranslateName); 227 return AddWindowsFont(&lfa, bVert, bTranslateName);
228 } 228 }
229 extern CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table, FX_DWORD na me); 229 extern CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table, FX_DWORD na me);
230 CFX_ByteString _FPDF_GetPSNameFromTT(HDC hDC) 230 CFX_ByteString _FPDF_GetPSNameFromTT(HDC hDC)
231 { 231 {
232 CFX_ByteString result; 232 CFX_ByteString result;
233 DWORD size = ::GetFontData(hDC, 'eman', 0, NULL, 0); 233 DWORD size = ::GetFontData(hDC, 'eman', 0, NULL, 0);
234 if (size != GDI_ERROR) { 234 if (size != GDI_ERROR) {
235 LPBYTE buffer = FX_Alloc(BYTE, size); 235 LPBYTE buffer = FX_Alloc(BYTE, size);
236 ::GetFontData(hDC, 'eman', 0, buffer, size); 236 ::GetFontData(hDC, 'eman', 0, buffer, size);
237 result = _FPDF_GetNameFromTT(buffer, 6); 237 result = _FPDF_GetNameFromTT(buffer, 6);
238 FX_Free(buffer); 238 FX_Free(buffer);
239 } 239 }
240 return result; 240 return result;
241 } 241 }
242 CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_B OOL bTranslateName) 242 CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTA* pLogFont, bool bVert, bool bT ranslateName)
243 { 243 {
244 pLogFont->lfHeight = -1000; 244 pLogFont->lfHeight = -1000;
245 pLogFont->lfWidth = 0; 245 pLogFont->lfWidth = 0;
246 HGDIOBJ hFont = CreateFontIndirectA(pLogFont); 246 HGDIOBJ hFont = CreateFontIndirectA(pLogFont);
247 HDC hDC = CreateCompatibleDC(NULL); 247 HDC hDC = CreateCompatibleDC(NULL);
248 hFont = SelectObject(hDC, hFont); 248 hFont = SelectObject(hDC, hFont);
249 int tm_size = GetOutlineTextMetrics(hDC, 0, NULL); 249 int tm_size = GetOutlineTextMetrics(hDC, 0, NULL);
250 if (tm_size == 0) { 250 if (tm_size == 0) {
251 hFont = SelectObject(hDC, hFont); 251 hFont = SelectObject(hDC, hFont);
252 DeleteObject(hFont); 252 DeleteObject(hFont);
253 DeleteDC(hDC); 253 DeleteDC(hDC);
254 return NULL; 254 return NULL;
255 } 255 }
256 LPBYTE tm_buf = FX_Alloc(BYTE, tm_size); 256 LPBYTE tm_buf = FX_Alloc(BYTE, tm_size);
257 OUTLINETEXTMETRIC* ptm = (OUTLINETEXTMETRIC*)tm_buf; 257 OUTLINETEXTMETRIC* ptm = (OUTLINETEXTMETRIC*)tm_buf;
258 GetOutlineTextMetrics(hDC, tm_size, ptm); 258 GetOutlineTextMetrics(hDC, tm_size, ptm);
259 int flags = 0, italicangle, ascend, descend, capheight, bbox[4]; 259 int flags = 0, italicangle, ascend, descend, capheight, bbox[4];
260 if (pLogFont->lfItalic) { 260 if (pLogFont->lfItalic) {
261 flags |= PDFFONT_ITALIC; 261 flags |= PDFFONT_ITALIC;
262 } 262 }
263 if ((pLogFont->lfPitchAndFamily & 3) == FIXED_PITCH) { 263 if ((pLogFont->lfPitchAndFamily & 3) == FIXED_PITCH) {
264 flags |= PDFFONT_FIXEDPITCH; 264 flags |= PDFFONT_FIXEDPITCH;
265 } 265 }
266 if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_ROMAN) { 266 if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_ROMAN) {
267 flags |= PDFFONT_SERIF; 267 flags |= PDFFONT_SERIF;
268 } 268 }
269 if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_SCRIPT) { 269 if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_SCRIPT) {
270 flags |= PDFFONT_SCRIPT; 270 flags |= PDFFONT_SCRIPT;
271 } 271 }
272 FX_BOOL bCJK = pLogFont->lfCharSet == CHINESEBIG5_CHARSET || pLogFont->lfCha rSet == GB2312_CHARSET || 272 bool bCJK = pLogFont->lfCharSet == CHINESEBIG5_CHARSET || pLogFont->lfCharSe t == GB2312_CHARSET ||
273 pLogFont->lfCharSet == HANGEUL_CHARSET || pLogFont->lfCharSet == SHIFTJIS_CHARSET; 273 pLogFont->lfCharSet == HANGEUL_CHARSET || pLogFont->lfCharSet == SHIFTJIS_CHARSET;
274 CFX_ByteString basefont; 274 CFX_ByteString basefont;
275 if (bTranslateName && bCJK) { 275 if (bTranslateName && bCJK) {
276 basefont = _FPDF_GetPSNameFromTT(hDC); 276 basefont = _FPDF_GetPSNameFromTT(hDC);
277 } 277 }
278 if (basefont.IsEmpty()) { 278 if (basefont.IsEmpty()) {
279 basefont = pLogFont->lfFaceName; 279 basefont = pLogFont->lfFaceName;
280 } 280 }
281 italicangle = ptm->otmItalicAngle / 10; 281 italicangle = ptm->otmItalicAngle / 10;
282 ascend = ptm->otmrcFontBox.top; 282 ascend = ptm->otmrcFontBox.top;
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 static void _CFString2CFXByteString(CFStringRef src, CFX_ByteString &dest) 541 static void _CFString2CFXByteString(CFStringRef src, CFX_ByteString &dest)
542 { 542 {
543 SInt32 len = CFStringGetLength(src); 543 SInt32 len = CFStringGetLength(src);
544 CFRange range = CFRangeMake(0, len); 544 CFRange range = CFRangeMake(0, len);
545 CFIndex used = 0; 545 CFIndex used = 0;
546 UInt8* pBuffer = (UInt8*)calloc(len+1, sizeof(UInt8)); 546 UInt8* pBuffer = (UInt8*)calloc(len+1, sizeof(UInt8));
547 CFStringGetBytes(src, range, kCFStringEncodingASCII, 0, false, pBuffer, len, &used); 547 CFStringGetBytes(src, range, kCFStringEncodingASCII, 0, false, pBuffer, len, &used);
548 dest = (FX_CHAR*)pBuffer; 548 dest = (FX_CHAR*)pBuffer;
549 free(pBuffer); 549 free(pBuffer);
550 } 550 }
551 FX_BOOL IsHasCharSet(CFArrayRef languages, const CFX_DWordArray &charSets) 551 bool IsHasCharSet(CFArrayRef languages, const CFX_DWordArray &charSets)
552 { 552 {
553 int iCount = charSets.GetSize(); 553 int iCount = charSets.GetSize();
554 for (int i = 0; i < CFArrayGetCount(languages); ++i) { 554 for (int i = 0; i < CFArrayGetCount(languages); ++i) {
555 CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(languages, i) ; 555 CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(languages, i) ;
556 FX_DWORD CharSet = FX_GetCharsetFromLang(CFStringGetCStringPtr(language, kCFStringEncodingMacRoman), -1); 556 FX_DWORD CharSet = FX_GetCharsetFromLang(CFStringGetCStringPtr(language, kCFStringEncodingMacRoman), -1);
557 for (int j = 0; j < iCount; ++j) { 557 for (int j = 0; j < iCount; ++j) {
558 if (CharSet == charSets[j]) { 558 if (CharSet == charSets[j]) {
559 return TRUE; 559 return true;
560 } 560 }
561 } 561 }
562 } 562 }
563 return FALSE; 563 return false;
564 } 564 }
565 void FX_GetCharWidth(CTFontRef font, UniChar start, UniChar end, int* width) 565 void FX_GetCharWidth(CTFontRef font, UniChar start, UniChar end, int* width)
566 { 566 {
567 CGFloat size = CTFontGetSize(font); 567 CGFloat size = CTFontGetSize(font);
568 for (; start <= end; ++start) { 568 for (; start <= end; ++start) {
569 CGGlyph pGlyph = 0; 569 CGGlyph pGlyph = 0;
570 CFIndex count = 1; 570 CFIndex count = 1;
571 CTFontGetGlyphsForCharacters(font, &start, &pGlyph, count); 571 CTFontGetGlyphsForCharacters(font, &start, &pGlyph, count);
572 CGSize advances; 572 CGSize advances;
573 CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, &pGlyph, &ad vances, 1); 573 CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, &pGlyph, &ad vances, 1);
(...skipping 17 matching lines...) Expand all
591 pWidthArray->AddInteger(*widths); 591 pWidthArray->AddInteger(*widths);
592 } else { 592 } else {
593 CPDF_Array* pWidthArray1 = new CPDF_Array; 593 CPDF_Array* pWidthArray1 = new CPDF_Array;
594 pWidthArray->Add(pWidthArray1); 594 pWidthArray->Add(pWidthArray1);
595 for (i = 0; i < size; i ++) { 595 for (i = 0; i < size; i ++) {
596 pWidthArray1->AddInteger(widths[i]); 596 pWidthArray1->AddInteger(widths[i]);
597 } 597 }
598 } 598 }
599 FX_Free(widths); 599 FX_Free(widths);
600 } 600 }
601 CPDF_Font* CPDF_Document::AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTr anslateName) 601 CPDF_Font* CPDF_Document::AddMacFont(CTFontRef pFont, bool bVert, bool bTranslat eName)
602 { 602 {
603 CTFontRef font = (CTFontRef)pFont; 603 CTFontRef font = (CTFontRef)pFont;
604 CTFontDescriptorRef descriptor = CTFontCopyFontDescriptor(font); 604 CTFontDescriptorRef descriptor = CTFontCopyFontDescriptor(font);
605 if (descriptor == NULL) { 605 if (descriptor == NULL) {
606 return NULL; 606 return NULL;
607 } 607 }
608 CFX_ByteString basefont; 608 CFX_ByteString basefont;
609 FX_BOOL bCJK = FALSE; 609 bool bCJK = false;
610 int flags = 0, italicangle = 0, ascend = 0, descend = 0, capheight = 0, bbox [4]; 610 int flags = 0, italicangle = 0, ascend = 0, descend = 0, capheight = 0, bbox [4];
611 FXSYS_memset(bbox, 0, sizeof(int) * 4); 611 FXSYS_memset(bbox, 0, sizeof(int) * 4);
612 CFArrayRef languages = (CFArrayRef)CTFontDescriptorCopyAttribute(descriptor, kCTFontLanguagesAttribute); 612 CFArrayRef languages = (CFArrayRef)CTFontDescriptorCopyAttribute(descriptor, kCTFontLanguagesAttribute);
613 if (languages == NULL) { 613 if (languages == NULL) {
614 CFRelease(descriptor); 614 CFRelease(descriptor);
615 return NULL; 615 return NULL;
616 } 616 }
617 CFX_DWordArray charSets; 617 CFX_DWordArray charSets;
618 charSets.Add(FXFONT_CHINESEBIG5_CHARSET); 618 charSets.Add(FXFONT_CHINESEBIG5_CHARSET);
619 charSets.Add(FXFONT_GB2312_CHARSET); 619 charSets.Add(FXFONT_GB2312_CHARSET);
620 charSets.Add(FXFONT_HANGEUL_CHARSET); 620 charSets.Add(FXFONT_HANGEUL_CHARSET);
621 charSets.Add(FXFONT_SHIFTJIS_CHARSET); 621 charSets.Add(FXFONT_SHIFTJIS_CHARSET);
622 if (IsHasCharSet(languages, charSets)) { 622 if (IsHasCharSet(languages, charSets)) {
623 bCJK = TRUE; 623 bCJK = true;
624 } 624 }
625 CFRelease(descriptor); 625 CFRelease(descriptor);
626 CFDictionaryRef traits = (CFDictionaryRef)CTFontCopyTraits(font); 626 CFDictionaryRef traits = (CFDictionaryRef)CTFontCopyTraits(font);
627 if (traits == NULL) { 627 if (traits == NULL) {
628 CFRelease(languages); 628 CFRelease(languages);
629 return NULL; 629 return NULL;
630 } 630 }
631 CFNumberRef sybolicTrait = (CFNumberRef)CFDictionaryGetValue(traits, kCTFont SymbolicTrait); 631 CFNumberRef sybolicTrait = (CFNumberRef)CFDictionaryGetValue(traits, kCTFont SymbolicTrait);
632 CTFontSymbolicTraits trait = 0; 632 CTFontSymbolicTraits trait = 0;
633 CFNumberGetValue(sybolicTrait, kCFNumberSInt32Type, &trait); 633 CFNumberGetValue(sybolicTrait, kCFNumberSInt32Type, &trait);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 pWidths->AddInteger(char_widths[i]); 729 pWidths->AddInteger(char_widths[i]);
730 } 730 }
731 pBaseDict->SetAt("Widths", pWidths); 731 pBaseDict->SetAt("Widths", pWidths);
732 } else { 732 } else {
733 flags |= PDFFONT_NONSYMBOLIC; 733 flags |= PDFFONT_NONSYMBOLIC;
734 CPDF_Array* pArray = NULL; 734 CPDF_Array* pArray = NULL;
735 pFontDict = new CPDF_Dictionary; 735 pFontDict = new CPDF_Dictionary;
736 CFX_ByteString cmap; 736 CFX_ByteString cmap;
737 CFX_ByteString ordering; 737 CFX_ByteString ordering;
738 int supplement; 738 int supplement;
739 FX_BOOL bFound = FALSE; 739 bool bFound = false;
740 CPDF_Array* pWidthArray = new CPDF_Array; 740 CPDF_Array* pWidthArray = new CPDF_Array;
741 charSets.RemoveAll(); 741 charSets.RemoveAll();
742 charSets.Add(FXFONT_CHINESEBIG5_CHARSET); 742 charSets.Add(FXFONT_CHINESEBIG5_CHARSET);
743 if (IsHasCharSet(languages, charSets)) { 743 if (IsHasCharSet(languages, charSets)) {
744 cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H"; 744 cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
745 ordering = "CNS1"; 745 ordering = "CNS1";
746 supplement = 4; 746 supplement = 4;
747 pWidthArray->AddInteger(1); 747 pWidthArray->AddInteger(1);
748 _InsertWidthArray(font, 0x20, 0x7e, pWidthArray); 748 _InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
749 bFound = TRUE; 749 bFound = true;
750 } 750 }
751 charSets.RemoveAll(); 751 charSets.RemoveAll();
752 charSets.Add(FXFONT_GB2312_CHARSET); 752 charSets.Add(FXFONT_GB2312_CHARSET);
753 if (!bFound && IsHasCharSet(languages, charSets)) { 753 if (!bFound && IsHasCharSet(languages, charSets)) {
754 cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H"; 754 cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
755 ordering = "GB1", supplement = 2; 755 ordering = "GB1", supplement = 2;
756 pWidthArray->AddInteger(7716); 756 pWidthArray->AddInteger(7716);
757 _InsertWidthArray(font, 0x20, 0x20, pWidthArray); 757 _InsertWidthArray(font, 0x20, 0x20, pWidthArray);
758 pWidthArray->AddInteger(814); 758 pWidthArray->AddInteger(814);
759 _InsertWidthArray(font, 0x21, 0x7e, pWidthArray); 759 _InsertWidthArray(font, 0x21, 0x7e, pWidthArray);
760 bFound = TRUE; 760 bFound = true;
761 } 761 }
762 charSets.RemoveAll(); 762 charSets.RemoveAll();
763 charSets.Add(FXFONT_HANGEUL_CHARSET); 763 charSets.Add(FXFONT_HANGEUL_CHARSET);
764 if (!bFound && IsHasCharSet(languages, charSets)) { 764 if (!bFound && IsHasCharSet(languages, charSets)) {
765 cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H"; 765 cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
766 ordering = "Korea1"; 766 ordering = "Korea1";
767 supplement = 2; 767 supplement = 2;
768 pWidthArray->AddInteger(1); 768 pWidthArray->AddInteger(1);
769 _InsertWidthArray(font, 0x20, 0x7e, pWidthArray); 769 _InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
770 bFound = TRUE; 770 bFound = true;
771 } 771 }
772 charSets.RemoveAll(); 772 charSets.RemoveAll();
773 charSets.Add(FXFONT_SHIFTJIS_CHARSET); 773 charSets.Add(FXFONT_SHIFTJIS_CHARSET);
774 if (!bFound && IsHasCharSet(languages, charSets)) { 774 if (!bFound && IsHasCharSet(languages, charSets)) {
775 cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H"; 775 cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
776 ordering = "Japan1"; 776 ordering = "Japan1";
777 supplement = 5; 777 supplement = 5;
778 pWidthArray->AddInteger(231); 778 pWidthArray->AddInteger(231);
779 _InsertWidthArray(font, 0x20, 0x7d, pWidthArray); 779 _InsertWidthArray(font, 0x20, 0x7d, pWidthArray);
780 pWidthArray->AddInteger(326); 780 pWidthArray->AddInteger(326);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 pWidthArray->AddInteger(*widths); 859 pWidthArray->AddInteger(*widths);
860 } else { 860 } else {
861 CPDF_Array* pWidthArray1 = new CPDF_Array; 861 CPDF_Array* pWidthArray1 = new CPDF_Array;
862 pWidthArray->Add(pWidthArray1); 862 pWidthArray->Add(pWidthArray1);
863 for (i = 0; i < size; i ++) { 863 for (i = 0; i < size; i ++) {
864 pWidthArray1->AddInteger(widths[i]); 864 pWidthArray1->AddInteger(widths[i]);
865 } 865 }
866 } 866 }
867 FX_Free(widths); 867 FX_Free(widths);
868 } 868 }
869 CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert) 869 CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, bool bVert)
870 { 870 {
871 if (pFont == NULL) { 871 if (pFont == NULL) {
872 return NULL; 872 return NULL;
873 } 873 }
874 FX_BOOL bCJK = charset == FXFONT_CHINESEBIG5_CHARSET || charset == FXFONT_GB 2312_CHARSET || 874 bool bCJK = charset == FXFONT_CHINESEBIG5_CHARSET || charset == FXFONT_GB231 2_CHARSET ||
875 charset == FXFONT_HANGEUL_CHARSET || charset == FXFONT_SHIFTJ IS_CHARSET; 875 charset == FXFONT_HANGEUL_CHARSET || charset == FXFONT_SHIFTJ IS_CHARSET;
876 CFX_ByteString basefont = pFont->GetFamilyName(); 876 CFX_ByteString basefont = pFont->GetFamilyName();
877 basefont.Replace(" ", ""); 877 basefont.Replace(" ", "");
878 int flags = 0; 878 int flags = 0;
879 if (pFont->IsBold()) { 879 if (pFont->IsBold()) {
880 flags |= PDFFONT_FORCEBOLD; 880 flags |= PDFFONT_FORCEBOLD;
881 } 881 }
882 if (pFont->IsItalic()) { 882 if (pFont->IsItalic()) {
883 flags |= PDFFONT_ITALIC; 883 flags |= PDFFONT_ITALIC;
884 } 884 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 } 1044 }
1045 } 1045 }
1046 } 1046 }
1047 delete pEncoding; 1047 delete pEncoding;
1048 pFontDesc->SetAtInteger("StemV", nStemV); 1048 pFontDesc->SetAtInteger("StemV", nStemV);
1049 AddIndirectObject(pFontDesc); 1049 AddIndirectObject(pFontDesc);
1050 pFontDict->SetAtReference("FontDescriptor", this, pFontDesc); 1050 pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
1051 return LoadFont(pBaseDict); 1051 return LoadFont(pBaseDict);
1052 } 1052 }
1053 static int InsertDeletePDFPage(CPDF_Document* pDoc, CPDF_Dictionary* pPages, 1053 static int InsertDeletePDFPage(CPDF_Document* pDoc, CPDF_Dictionary* pPages,
1054 int nPagesToGo, CPDF_Dictionary* pPage, FX_BOOL b Insert, CFX_PtrArray& stackList) 1054 int nPagesToGo, CPDF_Dictionary* pPage, bool bIns ert, CFX_PtrArray& stackList)
1055 { 1055 {
1056 CPDF_Array* pKidList = pPages->GetArray("Kids"); 1056 CPDF_Array* pKidList = pPages->GetArray("Kids");
1057 if (!pKidList) { 1057 if (!pKidList) {
1058 return -1; 1058 return -1;
1059 } 1059 }
1060 int nKids = pKidList->GetCount(); 1060 int nKids = pKidList->GetCount();
1061 for (int i = 0; i < nKids; i ++) { 1061 for (int i = 0; i < nKids; i ++) {
1062 CPDF_Dictionary* pKid = pKidList->GetDict(i); 1062 CPDF_Dictionary* pKid = pKidList->GetDict(i);
1063 if (pKid->GetString("Type") == FX_BSTRC("Page")) { 1063 if (pKid->GetString("Type") == FX_BSTRC("Page")) {
1064 if (nPagesToGo == 0) { 1064 if (nPagesToGo == 0) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 if (!pPagesList) { 1114 if (!pPagesList) {
1115 pPagesList = new CPDF_Array; 1115 pPagesList = new CPDF_Array;
1116 pPages->SetAt(FX_BSTRC("Kids"), pPagesList); 1116 pPages->SetAt(FX_BSTRC("Kids"), pPagesList);
1117 } 1117 }
1118 pPagesList->Add(pPageDict, pDoc); 1118 pPagesList->Add(pPageDict, pDoc);
1119 pPages->SetAtInteger(FX_BSTRC("Count"), nPages + 1); 1119 pPages->SetAtInteger(FX_BSTRC("Count"), nPages + 1);
1120 pPageDict->SetAtReference(FX_BSTRC("Parent"), pDoc, pPages->GetObjNum()) ; 1120 pPageDict->SetAtReference(FX_BSTRC("Parent"), pDoc, pPages->GetObjNum()) ;
1121 } else { 1121 } else {
1122 CFX_PtrArray stack; 1122 CFX_PtrArray stack;
1123 stack.Add(pPages); 1123 stack.Add(pPages);
1124 if (InsertDeletePDFPage(pDoc, pPages, iPage, pPageDict, TRUE, stack) < 0 ) { 1124 if (InsertDeletePDFPage(pDoc, pPages, iPage, pPageDict, true, stack) < 0 ) {
1125 return -1; 1125 return -1;
1126 } 1126 }
1127 } 1127 }
1128 pageList.InsertAt(iPage, pPageDict->GetObjNum()); 1128 pageList.InsertAt(iPage, pPageDict->GetObjNum());
1129 return iPage; 1129 return iPage;
1130 } 1130 }
1131 CPDF_Dictionary* CPDF_Document::CreateNewPage(int iPage) 1131 CPDF_Dictionary* CPDF_Document::CreateNewPage(int iPage)
1132 { 1132 {
1133 CPDF_Dictionary* pDict = new CPDF_Dictionary; 1133 CPDF_Dictionary* pDict = new CPDF_Dictionary;
1134 pDict->SetAtName("Type", "Page"); 1134 pDict->SetAtName("Type", "Page");
(...skipping 22 matching lines...) Expand all
1157 CPDF_Dictionary* pPages = pRoot->GetDict("Pages"); 1157 CPDF_Dictionary* pPages = pRoot->GetDict("Pages");
1158 if (pPages == NULL) { 1158 if (pPages == NULL) {
1159 return; 1159 return;
1160 } 1160 }
1161 int nPages = pPages->GetInteger("Count"); 1161 int nPages = pPages->GetInteger("Count");
1162 if (iPage < 0 || iPage >= nPages) { 1162 if (iPage < 0 || iPage >= nPages) {
1163 return; 1163 return;
1164 } 1164 }
1165 CFX_PtrArray stack; 1165 CFX_PtrArray stack;
1166 stack.Add(pPages); 1166 stack.Add(pPages);
1167 if (InsertDeletePDFPage(this, pPages, iPage, NULL, FALSE, stack) < 0) { 1167 if (InsertDeletePDFPage(this, pPages, iPage, NULL, false, stack) < 0) {
1168 return; 1168 return;
1169 } 1169 }
1170 m_PageList.RemoveAt(iPage); 1170 m_PageList.RemoveAt(iPage);
1171 } 1171 }
1172 CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStrin gC& name); 1172 CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStrin gC& name);
1173 void FPDFAPI_FlatPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& nam e) 1173 void FPDFAPI_FlatPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& nam e)
1174 { 1174 {
1175 if (pPageDict->KeyExist(name)) { 1175 if (pPageDict->KeyExist(name)) {
1176 return; 1176 return;
1177 } 1177 }
1178 CPDF_Object* pObj = FPDFAPI_GetPageAttr(pPageDict, name); 1178 CPDF_Object* pObj = FPDFAPI_GetPageAttr(pPageDict, name);
1179 if (pObj) { 1179 if (pObj) {
1180 pPageDict->SetAt(name, pObj->Clone()); 1180 pPageDict->SetAt(name, pObj->Clone());
1181 } 1181 }
1182 } 1182 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp ('k') | core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698