diff options
author | bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-11-20 18:52:23 +0000 |
---|---|---|
committer | bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-11-20 18:52:23 +0000 |
commit | a544f29496758de6ed2ebf5a53558574019c9da1 (patch) | |
tree | a69ac43e4d7e0babbcd08f788eb5b7179f9c3ef8 /src/sfnt/SkOTUtils.cpp | |
parent | 336b4da6b0d20f27f9980b03415354a2f0698e18 (diff) |
Additional OpenType tables.
https://codereview.appspot.com/6850075/
git-svn-id: http://skia.googlecode.com/svn/trunk@6509 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/sfnt/SkOTUtils.cpp')
-rw-r--r-- | src/sfnt/SkOTUtils.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/sfnt/SkOTUtils.cpp b/src/sfnt/SkOTUtils.cpp index 0925d0cda9..4eeaa36d04 100644 --- a/src/sfnt/SkOTUtils.cpp +++ b/src/sfnt/SkOTUtils.cpp @@ -14,6 +14,16 @@ #include "SkOTTableTypes.h" #include "SkOTUtils.h" +extern const uint8_t SK_OT_GlyphData_NoOutline[] = { + 0x0,0x0, //SkOTTableGlyphData::numberOfContours + 0x0,0x0, //SkOTTableGlyphData::xMin + 0x0,0x0, //SkOTTableGlyphData::yMin + 0x0,0x0, //SkOTTableGlyphData::xMax + 0x0,0x0, //SkOTTableGlyphData::yMax + + 0x0,0x0, //SkOTTableGlyphDataInstructions::length +}; + uint32_t SkOTUtils::CalcTableChecksum(SK_OT_ULONG *data, size_t length) { uint32_t sum = 0; SK_OT_ULONG *dataEnd = data + ((length + 3) & ~3) / sizeof(SK_OT_ULONG); @@ -23,8 +33,7 @@ uint32_t SkOTUtils::CalcTableChecksum(SK_OT_ULONG *data, size_t length) { return sum; } -SkData* SkOTUtils::RenameFont(SkStream* fontData, - const char* fontName, int fontNameLen) { +SkData* SkOTUtils::RenameFont(SkStream* fontData, const char* fontName, int fontNameLen) { // Get the sfnt header. SkSFNTHeader sfntHeader; @@ -34,7 +43,7 @@ SkData* SkOTUtils::RenameFont(SkStream* fontData, // Find the existing 'name' table. int tableIndex; - SkSFNTTableDirectoryEntry tableEntry; + SkSFNTHeader::TableDirectoryEntry tableEntry; int numTables = SkEndian_SwapBE16(sfntHeader.numTables); for (tableIndex = 0; tableIndex < numTables; ++tableIndex) { if (fontData->read(&tableEntry, sizeof(tableEntry)) < sizeof(tableEntry)) { @@ -88,9 +97,9 @@ SkData* SkOTUtils::RenameFont(SkStream* fontData, } //Fix up the offsets of the directory entries after the old 'name' table entry. - SkSFNTTableDirectoryEntry* currentEntry = reinterpret_cast<SkSFNTTableDirectoryEntry*>(data + sizeof(SkSFNTHeader)); - SkSFNTTableDirectoryEntry* endEntry = currentEntry + numTables; - SkSFNTTableDirectoryEntry* headTableEntry = NULL; + SkSFNTHeader::TableDirectoryEntry* currentEntry = reinterpret_cast<SkSFNTHeader::TableDirectoryEntry*>(data + sizeof(SkSFNTHeader)); + SkSFNTHeader::TableDirectoryEntry* endEntry = currentEntry + numTables; + SkSFNTHeader::TableDirectoryEntry* headTableEntry = NULL; for (; currentEntry < endEntry; ++currentEntry) { uint32_t oldOffset = SkEndian_SwapBE32(currentEntry->offset); if (oldOffset > oldNameTableOffset) { @@ -102,7 +111,7 @@ SkData* SkOTUtils::RenameFont(SkStream* fontData, } // Make the table directory entry point to the new 'name' table. - SkSFNTTableDirectoryEntry* nameTableEntry = reinterpret_cast<SkSFNTTableDirectoryEntry*>(data + sizeof(SkSFNTHeader)) + tableIndex; + SkSFNTHeader::TableDirectoryEntry* nameTableEntry = reinterpret_cast<SkSFNTHeader::TableDirectoryEntry*>(data + sizeof(SkSFNTHeader)) + tableIndex; nameTableEntry->logicalLength = SkEndian_SwapBE32(nameTableLogicalSize); nameTableEntry->offset = SkEndian_SwapBE32(originalDataSize); |