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

Side by Side Diff: src/pdf/SkPDFFont.cpp

Issue 2112943002: SkPDF: Glyph Useage Map improvements (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 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
« no previous file with comments | « src/pdf/SkPDFFont.h ('k') | src/utils/SkBitSet.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include <ctype.h> 8 #include <ctype.h>
9 9
10 #include "SkData.h" 10 #include "SkData.h"
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 void SkPDFGlyphSet::set(const uint16_t* glyphIDs, int numGlyphs) { 645 void SkPDFGlyphSet::set(const uint16_t* glyphIDs, int numGlyphs) {
646 for (int i = 0; i < numGlyphs; ++i) { 646 for (int i = 0; i < numGlyphs; ++i) {
647 fBitSet.setBit(glyphIDs[i], true); 647 fBitSet.setBit(glyphIDs[i], true);
648 } 648 }
649 } 649 }
650 650
651 bool SkPDFGlyphSet::has(uint16_t glyphID) const { 651 bool SkPDFGlyphSet::has(uint16_t glyphID) const {
652 return fBitSet.isBitSet(glyphID); 652 return fBitSet.isBitSet(glyphID);
653 } 653 }
654 654
655 void SkPDFGlyphSet::merge(const SkPDFGlyphSet& usage) {
656 fBitSet.orBits(usage.fBitSet);
657 }
658
659 void SkPDFGlyphSet::exportTo(SkTDArray<unsigned int>* glyphIDs) const { 655 void SkPDFGlyphSet::exportTo(SkTDArray<unsigned int>* glyphIDs) const {
660 fBitSet.exportTo(glyphIDs); 656 fBitSet.exportTo(glyphIDs);
661 } 657 }
662 658
663 /////////////////////////////////////////////////////////////////////////////// 659 ///////////////////////////////////////////////////////////////////////////////
664 // class SkPDFGlyphSetMap 660 // class SkPDFGlyphSetMap
665 /////////////////////////////////////////////////////////////////////////////// 661 ///////////////////////////////////////////////////////////////////////////////
666 SkPDFGlyphSetMap::FontGlyphSetPair::FontGlyphSetPair(SkPDFFont* font,
667 SkPDFGlyphSet* glyphSet)
668 : fFont(font),
669 fGlyphSet(glyphSet) {
670 }
671 662
672 SkPDFGlyphSetMap::SkPDFGlyphSetMap() { 663 SkPDFGlyphSetMap::SkPDFGlyphSetMap() {}
673 }
674 664
675 SkPDFGlyphSetMap::~SkPDFGlyphSetMap() { 665 SkPDFGlyphSetMap::~SkPDFGlyphSetMap() {
676 reset();
677 }
678
679 void SkPDFGlyphSetMap::merge(const SkPDFGlyphSetMap& usage) {
680 for (int i = 0; i < usage.fMap.count(); ++i) {
681 SkPDFGlyphSet* myUsage = getGlyphSetForFont(usage.fMap[i].fFont);
682 myUsage->merge(*(usage.fMap[i].fGlyphSet));
683 }
684 }
685
686 void SkPDFGlyphSetMap::reset() {
687 for (int i = 0; i < fMap.count(); ++i) {
688 delete fMap[i].fGlyphSet; // Should not be nullptr.
689 }
690 fMap.reset(); 666 fMap.reset();
691 } 667 }
692 668
693 void SkPDFGlyphSetMap::noteGlyphUsage(SkPDFFont* font, const uint16_t* glyphIDs, 669 void SkPDFGlyphSetMap::noteGlyphUsage(SkPDFFont* font, const uint16_t* glyphIDs,
694 int numGlyphs) { 670 int numGlyphs) {
695 SkPDFGlyphSet* subset = getGlyphSetForFont(font); 671 SkPDFGlyphSet* subset = getGlyphSetForFont(font);
696 if (subset) { 672 if (subset) {
697 subset->set(glyphIDs, numGlyphs); 673 subset->set(glyphIDs, numGlyphs);
698 } 674 }
699 } 675 }
700 676
701 SkPDFGlyphSet* SkPDFGlyphSetMap::getGlyphSetForFont(SkPDFFont* font) { 677 SkPDFGlyphSet* SkPDFGlyphSetMap::getGlyphSetForFont(SkPDFFont* font) {
702 int index = fMap.count(); 678 int index = fMap.count();
703 for (int i = 0; i < index; ++i) { 679 for (int i = 0; i < index; ++i) {
704 if (fMap[i].fFont == font) { 680 if (fMap[i].fFont == font) {
705 return fMap[i].fGlyphSet; 681 return &fMap[i].fGlyphSet;
706 } 682 }
707 } 683 }
708 fMap.append(); 684 FontGlyphSetPair& pair = fMap.push_back();
709 index = fMap.count() - 1; 685 pair.fFont = font;
710 fMap[index].fFont = font; 686 return &pair.fGlyphSet;
711 fMap[index].fGlyphSet = new SkPDFGlyphSet();
712 return fMap[index].fGlyphSet;
713 } 687 }
714 688
715 /////////////////////////////////////////////////////////////////////////////// 689 ///////////////////////////////////////////////////////////////////////////////
716 // class SkPDFFont 690 // class SkPDFFont
717 /////////////////////////////////////////////////////////////////////////////// 691 ///////////////////////////////////////////////////////////////////////////////
718 692
719 /* Font subset design: It would be nice to be able to subset fonts 693 /* Font subset design: It would be nice to be able to subset fonts
720 * (particularly type 3 fonts), but it's a lot of work and not a priority. 694 * (particularly type 3 fonts), but it's a lot of work and not a priority.
721 * 695 *
722 * Resources are canonicalized and uniqueified by pointer so there has to be 696 * Resources are canonicalized and uniqueified by pointer so there has to be
(...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 } 1409 }
1436 return *canon->fCanEmbedTypeface.set(id, canEmbed); 1410 return *canon->fCanEmbedTypeface.set(id, canEmbed);
1437 } 1411 }
1438 1412
1439 void SkPDFFont::drop() { 1413 void SkPDFFont::drop() {
1440 fTypeface = nullptr; 1414 fTypeface = nullptr;
1441 fFontInfo = nullptr; 1415 fFontInfo = nullptr;
1442 fDescriptor = nullptr; 1416 fDescriptor = nullptr;
1443 this->SkPDFDict::drop(); 1417 this->SkPDFDict::drop();
1444 } 1418 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFFont.h ('k') | src/utils/SkBitSet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698