diff options
author | vandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-01-25 21:01:34 +0000 |
---|---|---|
committer | vandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-01-25 21:01:34 +0000 |
commit | 2a22e10ab2946c5590cd2a258427ce3ccfca9bfa (patch) | |
tree | 1d96a3c68ca4bbe51935d5d2f56e46ccfd63f969 /src/pdf/SkPDFDocument.cpp | |
parent | c921843d85b4e79857103cdb614f76f123efa7f5 (diff) |
Add Truetype and Type 1 font embedding support
Sorry this is such a large CL. It was very exploratory for me to make this
work.
- Add an interface to SkFontHost to retrieve font information and provide NULL implementations on all platforms except Linux.
- Segment large Type 1 fonts into fonts with shared resources with 255 glyphs each.
- Convert the various Type 1 formats to the form PDF wants.
- Update font as we draw text instead of as part of the graphical state.
- Remove built-in font support, we can't really use it.
Other changes I can pull out to a separate CL if you like.
- Add SkTScopedPtr class.
- Fix double free of resources.
- Fix bug in resource unique-ifying code.
- Don't print anything for any empty clip path.
- Fix copy paste error - MiterLimit.
- Fix sign extension bug in SkPDFString
- Fix FlateTest rename that was missed on a previous commit.
Review URL: http://codereview.appspot.com/4082042
git-svn-id: http://skia.googlecode.com/svn/trunk@728 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/pdf/SkPDFDocument.cpp')
-rw-r--r-- | src/pdf/SkPDFDocument.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/pdf/SkPDFDocument.cpp b/src/pdf/SkPDFDocument.cpp index 2b1e3f731b..77a9fdbb61 100644 --- a/src/pdf/SkPDFDocument.cpp +++ b/src/pdf/SkPDFDocument.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 The Android Open Source Project + * Copyright (C) 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,12 +27,9 @@ void addResourcesToCatalog(int firstIndex, bool firstPage, for (int i = firstIndex; i < resourceList->count(); i++) { int index = resourceList->find((*resourceList)[i]); if (index != i) { - // The resource lists themselves should already be unique, so the - // first page resources shouldn't have any dups (assuming the first - // page resources are handled first). - SkASSERT(!firstPage); (*resourceList)[i]->unref(); resourceList->removeShuffle(i); + i--; } else { catalog->addObject((*resourceList)[i], firstPage); } @@ -68,6 +65,23 @@ bool SkPDFDocument::emitPDF(SkWStream* stream) { SkRefPtr<SkPDFObjRef> pageTreeRootRef = new SkPDFObjRef(pageTreeRoot); pageTreeRootRef->unref(); // SkRefPtr and new both took a reference. fDocCatalog->insert("Pages", pageTreeRootRef.get()); + + /* TODO(vandebo) output intent + SkRefPtr<SkPDFDict> outputIntent = new SkPDFDict("OutputIntent"); + outputIntent->unref(); // SkRefPtr and new both took a reference. + SkRefPtr<SkPDFName> intentSubtype = new SkPDFName("GTS_PDFA1"); + intentSubtype->unref(); // SkRefPtr and new both took a reference. + outputIntent->insert("S", intentSubtype.get()); + SkRefPtr<SkPDFString> intentIdentifier = new SkPDFString("sRGB"); + intentIdentifier->unref(); // SkRefPtr and new both took a reference. + outputIntent->insert("OutputConditionIdentifier", + intentIdentifier.get()); + SkRefPtr<SkPDFArray> intentArray = new SkPDFArray; + intentArray->unref(); // SkRefPtr and new both took a reference. + intentArray->append(outputIntent.get()); + fDocCatalog->insert("OutputIntent", intentArray.get()); + */ + bool first_page = true; for (int i = 0; i < fPages.count(); i++) { int resourceCount = fPageResources.count(); |